「git pull」と「git pull origin master」の違いについて調べた

プログラミング

最近、仕事上でGitの検証を行なっており、git pullとgit pull origin masterの違いについて調べることがあったので、備忘として残しておきます。

結論から言えば、下記の通りかなという感じです。

git pull
gitリモート上にある全ブランチの情報および更新を取得する。

git pull origin master
gitリモート上にある「master」ブランチの情報および更新を取得する。

これだけだと、よくわからんという人のために、事例で紹介します。

スポンサーリンク
スポンサーリンク

「git pull」と「git pull origin master」の違いを事例で考える

とあるGitリポジトリを作成し、AくんとBくんで開発を進める事になりました。

ローカル環境でブランチの情報を取得すべく、「git branch -a」を実行したとします。

「git branch -a」は、ブランチを一覧で取得するコマンドです。

$ git branch -a

すると、下記のように表示されています。

  * master
  remotes/origin/master

これは、下記のふたつの意味を持っています。
・ローカルでは、「master」ブランチを使用している
・リモートでは、「remotes/origin/master」というブランチが存在している

※「remote/origin/」で始まるブランチは、リモートに存在しているブランチのコピー、いわゆるリモートの「追跡ブランチ」になります。

ここで、Bくんが下記のコマンドでブランチ「dev_b」を作り、リモートに「dev_b」をpushしたとします。

$ git checkout -b dev_b
$ git push origin dev_b

今、リモートでは「master」と「dev_b」のふたつのブランチが存在しています。
実際に、Bくんのローカル環境で「git branch -a」を実行すると、下記のように「dev_b」がローカル・リモートともに追加されているのがわかるかと思います。

  * dev_b
  master
  remotes/origin/dev
  remotes/origin/master

ここで、Aくんが「git pull origin master」と「git pull」を実行した場合の違いを見ていきます。

git pull origin masterを実行した場合

「git pull origin master」したあとに、「git branch -a」を実行してブランチの一覧を確認してみます。

$ git pull origin master
$ git branch -a

結果

  * master
  remotes/origin/master

「dev_b」の情報は特に見えません。
つまり、あくまでリモート上のmasterの情報をローカルのmasterに反映しているだけです。

git pullを実行した場合

$ git pull
$ git branch -a

結果

 * master
  remotes/origin/dev
  remotes/origin/master

「git pull origin master」では取得できていなかった「remotes/origin/dev」が追加されています。

使い分け

基本的には「git pull」でいいと思います。

全ブランチの情報をローカルに持ってきておけば、ローカルで「git diff」コマンドを叩いたりして、ブランチごとの差分をとったりできますし。

あえて「git pull origin master」を使うのは下記のようなシチュエーションぐらいかな〜と思います。
※あくまで推測です

・ローカルとリモートで両方更新が発生しており、マージすると競合が発生するブランチのpullを避けたい
・ローカルの容量を節約したい

まとめ

Gitは勉強中なのと、検証ついでに書いた記事なので、もしかしたら間違ってる部分があるかもしれないです。

間違いがありましたら、コメントで教えてもらえると助かります!

コメント

タイトルとURLをコピーしました