156
113

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-06-06

これはなに?

いままでは気にしていなかったけど、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

参考になる。

156
113
1

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
156
113

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?