This request has already been treated.

  1. msp0310
Changes in body
Source | HTML | Preview
@@ -1,64 +1,64 @@
## これはなに?
いままでは気にしていなかったけど、git pull --rebase はpushする前にした方がいいよと言われた。
でもよくわからなかったので調べたのでそのまとめ。
## `git pull`って?
> `git fecth` + `git merge`のこと。
つまり、リモートの更新をローカルに持ってくるコマンドのショートカット版。
たとえば、`topic branch` で`git pull origin master` をすると、topic branchにmasterをmergeすることになる。
## じゃあ`git pull --rebase` は?
> `git fetch` + `git rebase`のこと。
-たとえば、`topic branch` で`git pull --rabase origin [main branch]` をすると、topic branchに[main branch]をbaseにしてrebaseすることになる。
+たとえば、`topic branch` で`git pull --rebase origin [main branch]` をすると、topic branchに[main branch]をbaseにしてrebaseすることになる。
```
[topic-branch] $ git pull --rebase [main branch]
```
違いがわかりにくいって?**わからなくていいや。とりあえず`git pull --rebase` を使ってからpushしよう。** 気になる人は、[分かりやすいサイトがあるから見るといいよ。](http://kray.jp/blog/git-pull-rebase/)ちなみにこれを理解するのに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`なのだ。よくわからなければとりあえずこれをすると良い。GitHubだとPullRequestを送らせてくれないのです。ちなみにこの状態がfast fowardと呼ばれる状態で、branchとして綺麗だし、差分が少ないのでconflictが起きづらいので非常に`良い`。
## conflictは普通に起こるんですよね。ほんと。
main branchとtopic branchで同じファイルを変更していた場合は、conflictが起こる。というか直してって言われる。
なおすと、多分直したところが含まれるコミットが一つのコミットとして変更されるっぽ。あとで調べる。
基本的に、branchをきれいな状態にするという思想でいいと思う。これがgit pull だと下記の状態になるのでちょっときたない。
```
develop o-o-o
/ /
master o-o-o-o-o-o
```
## 参考になる。
http://kray.jp/blog/git-pull-rebase/