LoginSignup
13
14

More than 5 years have passed since last update.

pull vs rebase

Last updated at Posted at 2012-03-03

ボクはgit rebase派です。正確にはgit pull --rebase origin masterを実行します。git pull origin masterは使いません、なぜならコミットの順番がおかしくなるから。

参考:git-pull、git-pull --rebaseをめぐる冒険+コンフリクトした場合の作業 - satoko's blog - s21g

下記は、masterからb1, b2, b3ブランチを作成し、b1 (hoge.txtを追加), b2 (fuga.txtを追加), b3 (piyo.txtを追加)でそれぞれ1度pushを行った後、b3をmasterにmergeし、b1ではgit pull origin masterを、b2ではgit pull --rebase origin masterを、実行したときのコミットログです。

  • pullの場合

Date: Sat Mar 3 00:44:07 2012 +0900

Merge branch 'master' of github.com:Hiroyou/rebase into b1

Date: Fri Mar 2 07:42:25 2012 -0800

Merge pull request #4 from Hiroyou/b3

added piyo.txt

Date: Sat Mar 3 00:40:00 2012 +0900

added piyo.txt

Date: Sat Mar 3 00:25:27 2012 +0900

added hoge.txt

  • rebaseの場合

Date: Sat Mar 3 00:34:41 2012 +0900

added fuga.txt

Date: Fri Mar 2 07:42:25 2012 -0800

Merge pull request #4 from Hiroyou/b3

added piyo.txt

Date: Sat Mar 3 00:40:00 2012 +0900

added piyo.txt

rebaseの場合はpiyo.txt→fuga.txtの順、pullの場合はhoge.txt→piyo.txtの順になっており、rebaseの方が直感的じゃないでしょうか。masterをメンテしている人からすると、なんで勝手にコミットの順変えるの?却下!って感じになると思います。

ただし、この後 b1, b2のそれぞれでpushを行うと、b1の場合はうまくいくのですが、b2の場合はnon-fast-forwardのエラーが出てしまいます。

これはrebaseによって、ローカルのb2とリモートのb2とがnon-fast-forwardな状態になってしまっているからです。最新のmasterからの差分を確認した上で問題がないようであればgit push -f origin masterと-f (強制)オプションを付けて実行すればpushすることはできます。

ただし、、、

ここでエラーメッセージに従ってgit pull origin b2とかしてしまうと、下記のようになってもうわけがわからなくなりますのでご注意を。b2をb2にmergeするだとか、同じコミットが2回入っていたりだとか、悲劇です。

Date: Sat Mar 3 01:43:30 2012 +0900

Merge branch 'b2' of github.com:Hiroyou/rebase into b2

Date: Sat Mar 3 00:34:41 2012 +0900

added fuga.txt

Date: Fri Mar 2 07:42:25 2012 -0800

Merge pull request #4 from Hiroyou/b3

added piyo.txt

Date: Sat Mar 3 00:40:00 2012 +0900

added piyo.txt

Date: Sat Mar 3 00:34:41 2012 +0900

added fuga.txt

これがgit rebaseが危険だと言われる所以なのでしょうか?

でも大丈夫。こうなった場合でもgit reset b2^で元の状態に戻せます。その後、-fをつけてpushすれば万事OK

注)git show-branchとかgit guiでRepository > Visualize All Branch Historyとかを駆使して注意してやった方が良いです。あくまで自己責任でお願いします。

13
14
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
13
14