「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をコピーしました