はじめに
Gitを使い始めて間もない方、もしくは使い始めて結構経つけど git fetch
、git merge
、git pull
の違いがあまりわからないという方向けのお話です。
概要
- git fetch
- git merge
- git pull
- よくある勘違い
git fetch
git fetchは、
リモートリポジトリの情報 を
ローカルリポジトリのリモート追跡ブランチ にコピーします。
少し分かりにくいですが、ローカルリポジトリの中には
- ローカルのブランチ情報(自分が作業している or チェックアウト等で作成済みのブランチ情報)
- リモートリポジトリのコピー情報(画像のリモート追跡ブランチ)
の2つの情報を持っています。
他者が修正して git push した情報はリモートリポジトリに保存されますが、それをローカル上のリモート追跡ブランチにコピーします。
git merge
git merge は、あるブランチの情報を別のブランチに取り込むコマンドです。
例えば 現在「branchA」にチェックアウトしている状態でgit merge main
をすると、
ローカルリポジトリのローカルブランチからマージされます。
また、同じ状況でgit merge origin/main
を実行すると、
リモート追跡ブランチのmainブランチ(origin/main)がマージされます。
git pull
git pull は git fetch + git merge を組み合わせたようなイメージを持つと理解しやすいです。
リモートリポジトリからローカルのリモート追跡ブランチにコピーした後、差分をローカルブランチにもマージします。
よくある勘違い
現場で作業をしていて、
-
git merge origin/branchA
でリモートリポジトリにある branchA の情報をマージできる
と思っている方が割と多かったです。
これではローカルリポジトリのリモート追跡ブランチからマージするだけなので、リモートリポジトリにある他者の修正分がマージされなくなってしまいます。
こういう時は git pull もしくは git fetch した後に git merge をするようにしましょう。
最後に
筆者は基本的には git fetch + git merge
の組み合わせで使用しています。
理由は、fetchで差分を目視で確認した後にマージすることができるからです。
差分に気になる箇所があればマージする前にエスカレーションできます。
(修正量が少ない時は git pull することもありますが)
本記事がどなたかの手助けになれば幸いです。
ここまで読んでいただきありがとうございました。