105
Help us understand the problem. What are the problem?

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

参考になる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
105
Help us understand the problem. What are the problem?