リモートリポジトリ(共有リポジトリ)をクローンしてきた後に、他のユーザによって行われたリモート上での変更を再度取得するには git fetch
コマンドを使用します。
$ git fetch
リモートリポジトリから fetch してきた内容は、直ちに現在チェックアウトしているブランチに反映されるということはなく、いったん自分の PC 上のリモートトラッキングブランチ (remote-tracking branch)というところに格納されます。
自分の PC 上のリモートトラッキングブランチを確認するには、git branch
コマンドに -r
オプションを付けて実行します。
$ git branch -r
origin/HEAD
origin/master
origin/
というプレフィックスは、トラック対象となっているリモートリポジトリの名前を示しています。
最初に git clone
したリモートリポジトリには、デフォルトで origin
という略称がつけられており、上記の出力は、この origin
リモートリポジトリをトラックするためのリモートトラッキングブランチであることを示しています。
origin/HEAD
、origin/master
というブランチは、ローカルブランチと区別して、リモートトラッキングブランチと呼びます。
git fetch
によってリモートリポジトリから取得してきた変更内容は、自分の PC 上のリモートトラッキングブランチ(origin/master
など)に格納されます。
つまり、ローカルブランチ(master
など)にはまだコミット内容が反映されていない状態です。
この変更をローカルブランチに対してコミットされた状態にするには、リモートトラッキングブランチ (origin/master
) 上のコミット内容を、ローカルブランチ (master
) にマージする必要があります。
$ git checkout master # master ブランチに切り替える(必要があれば)
$ git merge origin # リモートトラッキングブランチをローカルブランチ master にマージ
git merge
が成功すると、ローカルブランチにリモートブランチの内容がコミットされた状態になります。
git log
でちゃんとマージされていることを確認できます。
$ git log # ローカルの master ブランチに内容が取り込まれていることを確認
git fetch
と git merge
をまとめて実行する git pull
というコマンドもあります。
ただ、慣れるまでは、git fetch
と git merge
は別々に実行して、動きをちゃんと理解するようにしたほうがよいでしょう。
git pull
は git merge
まで一気に実行するため、変更内容のコンフリクトが発生して頭を抱えることがありますが、git fetch
単独の実行が失敗することはほとんどありません。
git fetch
さえ実行しておけば、他のユーザが共有サーバ上で行った変更を git log origin/master
コマンドで確認することができます。
ローカルブランチ master
に対してコミットした変更を、リモートリポジトリ(共有リポジトリ)に送りたい場合は、次のようにします。
$ git push origin master:master
上記の master:master
という部分は、<ローカルブランチ名>:<リモートブランチ名>
というペア情報を表しています。
つまり、上記のコマンドは、「origin
というリモートリポジトリに対して、ローカルの master
ブランチを、master
ブランチという名前で push する」という操作を表しています。
ローカルブランチ名とリモートブランチ名が master:master
のように同じ名前の場合は、次のように省略して指定することができます。
$ git push origin master
さらに、プッシュ先のリモートリポジトリ名が origin
であり、現在チェックアウトしているブランチの内容を push したいのであれば、以下のようにパラメータをすべて省略することができます。
$ git push
共有サーバーへの push は、多数のユーザに影響を与える作業であるため、最初のうちは若干緊張するかもしれません。
コマンド実行時に --dry-run
オプションを付けて実行すれば、どのような処理が行われるかをシミュレートできるので、まずはこれで何が起こるかを確認してから、実際の push 作業を行うとよいかもしれません。
$ git push --dry-run