LoginSignup
1
0

More than 3 years have passed since last update.

【Git】git pullはgit fetchとgit mergeと同じそれは知ってるけど、具体的にはどういうこと?

Last updated at Posted at 2021-02-26

git pullgit fetchしてgit mergeをするのと同じという話はよく目にする。

しかし、それぞれのコマンドでオプションや引数が省略された場合にどういった挙動になるのかが曖昧だったため、それらのコマンドが具体的に何をしているのかを調べてみた。

$git pull

↓ 同じ

$git fetch
$git merge

目次

  1. git fetch
  2. git merge
  3. 引数のあるgit pull
  4. よくある使い方


1. git fetch

オプションや引数を付けない場合、リモートレポジトリで登録されているoriginにあるすべての追跡ブランチのデータを取得してくる。

つまり、リモートレポジトリとしてoriginが登録されていることが前提となる。

▼リモートレポジトリ

//登録されているリモートレポジトリの確認
$ git remote 
origin

urlを確認したい場合はgit remote -vで確認できる。



▼リモート追跡ブランチ
リモート追跡ブランチは、git branch -aで確認できる。

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/aaa

上記の状態の場合、git fetchを実行すると、origin/masterと、origin/aaaからコミット履歴を取得してくる。

コミット履歴が更新されるのは、そのコマンドを実行したブランチではなく、origin/masterorigin/aaa

更新されたコミット履歴の確認

リモート追跡ブランチのコミット履歴を確認するには、

$ git log origin/<ブランチ名>を実行すればいい。

--online--graphオプションを付ければ見やすく表示できる。


2. git merge

オプションや引数を付けない場合、現在のブランチのリモート追跡ブランチをマージする。

もしmasterブランチでgit mergeを実行したのであれば、

$ git merge origin master

を実行したのと同じになる。



※注意点
master以外の別のブランチにいる場合(例えばブランチaaa)だと、master/masterではなく、そのリモートレポジトリ(origin/aaa)のコミット履歴を統合することになる。

ここが、単なるgit pullの落とし穴。

自分専用のブランチで作業している場合は、git pullしたところで何も更新されない。

もし、master以外のブランチで作業していて、リモートレポジトリのマスターのコミットをgit mergeしたい場合は、

$git pull origin master

↓ 同じ

$git fetch 
$git merge origin master

となる。


3. 引数のあるgit pull

では、リモートレポジトリとブランチを指定したgit pullはどういった処理になるのか?

$ git pull origin aaa

$git fetch origin aaa
$git merge origin aaa

git fetchで、指定したリモートレポジトリ(origin)のブランチ(aaa)からデータを取得してくる。

git mergeで取得してきたコミットを、コマンドを実行したブランチにマージする。


よくある使い方

複数人で実施しているプロジェクトでよくある使い方は、自分の作業環境を最新状態に保つために、

自分がブランチを切って作業をしている時に、masterの更新情報を取得して定期的にマージすること。

コマンドでみると、

$ git pull origin master

$git fetch origin master
$git merge origin master

を実行していることになる。



以上。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0