はじめに
上のGit fetch, merge,pullがそれぞれ似ていてややこしいので調べてみました。
Git操作は開発現場では必須のスキルなので僕自身がgitの使い方を勘違いしたまま
現場に入ってしまったのが上の3つのコマンドの違いです。
それぞれ3つの違いを説明して行きます。
まずがgitの前提知識からです。
ローカルリポジトリとリモートリポジトリの違い
Git にはローカルリポジトリとリモートリポジトリという2種類のリポジトリが存在します。
両者の違いは以下の通りです。
リポジトリ | 説明 |
---|---|
ローカルリポジトリ | 開発者が作業するPCにあるリポジトリ |
リモートリポジトリ | 開発者全員が共有できるリポジトリ(サーバーなどに上がっている) |
ローカルリポジトリで開発し、リモートリポジトリにプッシュして
開発者全員が共有できるようになります。
ローカルリポジトリの中身
ローカルリポジトリは以下の4つがあります。
ワーキングツリー | 作業場所でこれからコードを追加する場所 |
---|---|
インデックス | コミットするファイルを登録する場所 |
ローカルブランチ | ローカル環境にあるブランチ |
リモート追跡ブランチ | リモートリポジトリのコピー |
図にするとこんな感じです。
ここまでが前提知識です。
Git fetch
リモートの最新情報のコピーをローカルに反映するコマンドです。
取り込む場所はmasterブランチではなく、
origin/master
ブランチに取り込みます。
使い方
$ git fetch
これをやった時の画像は参考資料がわかりやすいので載せておきます。
他のコマンド例としては
$ git fetch origin master
これで リモートのmasterブランチからローカルのorigin/masterブランチへ反映します。
補足
・masterブランチはリリースする時に使うブランチの中心的な役割で
ここからブランチを切って開発して行きます。
・origin/masterブランチはローカルにある、リモートのmasterブランチを追跡するリモート追跡ブランチです。
Git merge
現在いるブランチの内容を他のブランチやmasterなどに反映させるコマンドです。
origin/masterからmasterへ最新情報を反映させます。
参考資料の画像を見るとわかりやすいです。
masterブランチの内容を今いるブランチにマージしたい時には下のコマンドを使うみたいです。
$ git merge master
これで今いるブランチの中に master ブランチの内容が反映されます。
Git pull
git mergeと git pullを同時に行うコマンドです。
リモートのmasterブランチからローカルのmasterまで一気に最新情報を反映させます。
mergeまで一気にやるため、ローカルブランチとコンフリクトが起きやすいみたいです。
コマンドで確認してみる
Git fetchとGit mergeのコマンドで見て行きます。
⚫︎Git fetch
$ git fetch //リモートの状態をリモート追跡ブランチにコピー
⚫︎Git merge
$ git merge origin/master //リモートのコピーからマージ
これらのコマンドを一括でやるのがgit pullです。
$ git pull origin master
注意
先輩エンジニアから聞いたのですが、
git pullはあまり実務で多用することはないみたいです。
参考資料
https://qiita.com/wann/items/688bc17460a457104d7d
https://kray.jp/blog/git-pull-rebase/