pullとfetchの違い

  • 2022年9月7日
  • 2022年9月19日
  • Git
  • 4View
  • 0件
Git NO IMAGE

git pullとgit fetchの違いは、リモートリポジトリから取得したブランチ情報(ソースコードなど)をローカルブランチにマージ(統合)するかどうかになります。

リモートリポジトリのブランチ情報を、ローカルブランチに統合するコマンドは下記です。

fetchの場合
$ git fetch origin master
$ git merge origin/master

pullの場合
$ git checkout master
$ git pull origin master

上記のコマンドでは、両方ともorogin(リモートリポジトリ名)のmasterブランチの情報を取得します。

git fetchでブランチ情報の統合

前述しましたが、git fetchを行った場合に、ローカルリポジトリの作業ブランチ(ローカルブランチ)には統合されません。

git fetchを行った場合は、リモートリポジトリにある最新のブランチ情報をリモート追跡ブランチに反映させます。

リモート追跡ブランチ(Remote-tracking branch)とは、ローカルリポジトリにあるリモートリポジトリの状態を追跡するブランチのことです。

ただ、ローカルリポジトリは常にネットワークに接続しているわけでありませんので、リモートリポジトリのブランチとリモート追跡ブランチが常に同じ状態ではありません。

誰かがブランチに変更をpushすると、状態が異なってしまうということです。

この状況を解消するためにfetchを行います。

$ git fetch origin master

リモート追跡ブランチは、「git branch -a」コマンドで確認することができます。

※ master
remotes/origin/master

今までは存在しなかった赤文字のブランチが生成されます。

リモート追跡ブランチの保存先はローカルリポジトリの「remotes/同リモート/同ブランチ」になります。

この状態ではワークツリーに変化が見られません。

下記のコマンドで、ワークツリーの情報をリモート追跡ブランチの情報と切り替えて、確認することができます。

# git checkout remotes/origin/master

git pullでブランチ情報の統合

pullはfetchとmergeを一度に行うコマンドです。

つまり、リモートリポジトリのブランチ情報をリモート追跡ブランチに更新して、ワークツリー(ローカルブランチ)の情報を統合します。

ただ、注意点としては、ワークツリーの現在のブランチに自動的に統合されることです。

「hoge」というリモートリポジトリのブランチ情報をpullしたときに、ワークツリーのブランチが「master」だった場合、masterbブランチに自動的に統合されてしまいます。

これを避けるためには、checkoutコマンドなどで、ワークツリーのブランチを合わせておく必要があります。