GITのわかりにくいところまとめてみた
目次
- add/commit/push
- 上記コマンドを取り消すには?
- fetch/pull
- rebase
- revert
- git remote originについて
git add/push/commit
- addとcommitはローカルリポジトリ内で使用するためのもの
addは資産をローカルのステージング上にアップ
commitでその資産がローカルリポジトリに反映される
- pushはcommitした資産をリモートリポジトリに反映するためのもの
リモートとのコンフリクトでpushが失敗した場合
「-f」オプションで強制的にpushする等で対応。
各種コマンドを取り消す方法
git commit
git reset --soft HEAD^
これはgit resetで直前のcommitを取り消すことができる
git add
git reset HEAD
これもgit resetで直前のaddを取り消すことができる
各種コマンド
HEAD
自分が作業している場所を示すポインタ
HEAD^
は「一つ前のコミット」を表す。
reset
特定の時点までファイルを巻き戻せる。
--soft
HEADの位置のみ巻き戻す
例:git reset --soft HEAD^
→直前のコミットを消す
--mixed
HEADの位置、インデックスを巻き戻す
オプションなしでも同じ結果になる
例:git reset HEAD
→インデックスの変更(addしたもの)を消す
--hard
HEADの位置、インデックス、作業ディレクトリを巻き戻す
例:git reset --hard HEAD^
→直前のコミットまですべて消す
git fetch/pull
- fetch : リモートの資産を引っ張ってくる。マージはなし。
- pull : リモートの資産を引っ張ってくる。マージあり。
違いはマージまでするか否か。
rebase
指定コミットを作り直して、ログをキレイにするためのコマンド
マージとの違い
- マージ:過去のコミットを全て一つの新しいコミットとして、マージ先にマージされる。
- リベース:マージ先のブランチの最新コミットにへリベース分のコミットが移動する(過去コミット履歴を含めた状態で)
コミットされたすべての変更を指定先のブランチでも再現できる点でマージとの差別化ができる。
履歴が直線的になるため、ログがきれいなまま保つことができる。
git revert
特定のコミットの変更を取り消す新しいコミットを作成する。
- 使用シチュエーション
過去の特定のコミットの変更を取り消したいが、その取り消し自体の履歴も残したい場合。
git resetとの使い分け
リモートのコミットを取り消したい場合は、revertのみしか使用不可。
resetではリモート分は消すことができない。
git remote add origin の origin について
origin とは何か?
- リモートリポジトリに対するデフォルトの名前(エイリアス)。ローカルのGitリポジトリが、どのリモートリポジトリと連携しているかを示す。
- 一般的に、GitHubや他のリモートリポジトリサービスからプロジェクトをクローン(
git clone
)すると、そのリモートリポジトリは自動的にorigin
という名前で登録される。
資産(リポジトリ)ごとに origin が存在する
- 各リポジトリごとにリモートリポジトリが設定されており、そのデフォルトのエイリアスとして origin が使用される。
- 各ローカルリポジトリはそれぞれ異なる origin を持つことができる。異なるリポジトリに対して異なる origin が設定され、それぞれ異なるリモートリポジトリと連携される。
複数のリモートリポジトリを追加可能
- 1つのリポジトリには、origin 以外にも複数のリモートリポジトリを設定できる。これにより、例えばプライベートなリモートと公開されているリモートの両方にプッシュすることが可能になる。