Posted at

fetch と pullの違い

More than 5 years have passed since last update.

git fetchgit pullの違いをわかりやすく書いてあるのが見つからなかったので。


git fetch

リモートからデータを取ってくる。

ただし取ってくるだけで、それ以外は何もしない。

例えば

A->B # master

A->B->C->D # origin/master

だった場合,git fetchはCとDをダウンロードしてきて、origin/masterとして保存する。

しかしローカルのmasterには一切手を触れないため、masterとorigin/masterは別のコミットを指す。

この状態でgit checkout masterとかすると、多分こんな感じのメッセージが出る

Switched to branch 'master'

Your branch is behind 'origin/master' by 2 commit, and can be fast-forwarded.

これは、このあと2回コミットされてるけど早送り(衝突が無いのでそのまま最新版に)できるよ!

ってことらしく,git merge origin/masterを実行することで、ローカルのmasterもorigin/masterを指す。


git pull

git pullは、上のgit fetchgit merge origin/masterまでを

全部まとめてやってくれる。

らくちん。

ただし、mergeしたくない時にやってしまうと大変なことになる。

そんな時は、戻したいコミットのIDを調べて、git reset --hard IDで元に戻せる。