LoginSignup
107

More than 1 year has passed since last update.

posted at

updated at

git pull --rebaseをpushする前にやろうという話。

これはなに?

いままでは気にしていなかったけど、git pull --rebase はpushする前にした方がいいよと言われた。
でもよくわからなかったので調べたのでそのまとめ。

git pullって?

git fetch + git mergeのこと。

つまり、リモートの更新をローカルに持ってくるコマンドのショートカット版。
たとえば、topic branchgit pull origin master をすると、topic branchにmasterをmergeすることになる。

じゃあgit pull --rebase は?

git fetch + git rebaseのこと。

たとえば、topic branchgit pull --rebase origin [main branch] をすると、topic branchに[main branch]をbaseにしてrebaseすることになる。

[topic-branch] $ git pull --rebase [main branch]

違いがわかりにくいって?わからなくていいや。とりあえずgit pull --rebase を使ってからpushしよう。 気になる人は、分かりやすいサイトがあるから見るといいよ。ちなみにこれを理解するのに8時間くらいかかりました。業務時間ずっと考えてたことになりますね。

図にすると?

checkoutした直後は下記の状態になる。

develop        o-o-o
              /
master o-o-o-o

これがしばらく進むとmasterでの開発が進んで下記の状態になる。

develop        o-o-o
              /
master o-o-o-o-o-o
  • このままpushするとconflictが起きやすい。そこで下記のようにしたい。
develop             o-o-o
                   /
master  o-o-o-o-o-o

この時使うといいのがgit pull --rebaseなのだ。よくわからなければとりあえずこれをすると良い。ちなみにこの状態がfast fowardと呼ばれる状態で、branchとして綺麗だし、差分が少ないのでconflictが起きづらいので非常に良い

conflictは普通に起こるんですよね。ほんと。

main branchとtopic branchで同じファイルを変更していた場合は、conflictが起こる。というか直してって言われる。

基本的に、branchをきれいな状態にするという思想でいいと思う。これがgit pull だと下記の状態になるのでちょっときたない。

develop        o-o-o
              /   /
master o-o-o-o-o-o

参考になる。

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
What you can do with signing up
107