技術空間

Git

git pullしてリモートリポジトリからローカルに取得する


TOP > Git > git pullしてリモートリポジトリからローカルに取得する



■リモートリポジトリとローカルリポジトリを同期させる

Gitのリモートリポジトリをローカルに同期させる(反映させる)には、git pullコマンドを使う。 これはちょうどgit pushの逆の役割になり、コマンドもほぼ同じ構文となる。originは「git push」で説明したように、リモートリポジトリを表す。

git pull origin {ブランチ名}
■git fetchとgit merge

git pullは内部的にgit fetchgit mergeが実行されている。

git fetch

リモートリポジトリの情報をリモート追跡ブランチへダウンロード(同期)するコマンド。 リモート追跡ブランチは、その名の通りリモートリポジトリの情報を追跡しているブランチで、remotes/origin/masterのような名前で内部的に管理されている。 git fetchを実行すると、ローカルブランチを直接更新するのではなく、一端リモート追跡ブランチを更新する。

git merge

git fetchの後は、git mergeコマンドが実行される。これはリモート追跡ブランチにダウンロードしてきた情報を、ローカルブランチへ取り込む作業となる。 実際にはgit merge FETCH_HEADというコマンドが実行されており、このFETCH_HEADはgit fetchで取得したリモート追跡ブランチの最新情報を意味する。

git fetchとgit mergeを図に表すと以下のようになる。 git pullはfetchとmergeの2段階に分かれており、それらをまとめたコマンドである。 従って、git pullによるmergeに不安がある場合、個別にfetchとmergeを実施すればよい。

ちなみに個別にfetchとmergeをしたときのgit logの出力状態を確認してみる。fetch前はリモート追跡ブランチとmasterブランチが同じ状態にあるが、 fetch後はリモート追跡ブランチのみ更新されている。さらにmergeをすると、再度masterブランチがリモート追跡ブランチと同じ状態になっている。

git fetch前
$ git log --oneline --all
80888c3 (HEAD -> master, origin/master, origin/HEAD) test4 <--masterとリモート追跡ブランチが同じ位置
69c90ef test3
d000b3a test2
5b89934 test1
git fetch後
$ git log --oneline --all
598c82e (origin/master, origin/HEAD) test5 <--リモート追跡ブランチだけ1つ進む
80888c3 (HEAD -> master) test4
69c90ef test3
d000b3a test2
5b89934 test1
git merge後
$ git log --oneline --all
598c82e (HEAD -> master, origin/master, origin/HEAD) test5 <--masterが再び追いつく
80888c3 test4
69c90ef test3
d000b3a test2
5b89934 test1


TOP > Git > git pullしてリモートリポジトリからローカルに取得する

Tweet ̃Gg[͂ĂȃubN}[Nɒlj
技術空間