git fetch
とgit 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 fetch
とgit merge origin/master
までを
全部まとめてやってくれる。
らくちん。
ただし、mergeしたくない時にやってしまうと大変なことになる。
そんな時は、戻したいコミットのIDを調べて、git reset --hard ID
で元に戻せる。