Skip to content

Instantly share code, notes, and snippets.

@Ryomasao
Last active May 11, 2020 03:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ryomasao/5b76109bdb20d2f1ae3a4ee7d416a99c to your computer and use it in GitHub Desktop.
Save Ryomasao/5b76109bdb20d2f1ae3a4ee7d416a99c to your computer and use it in GitHub Desktop.

gitメモ

お試しリポジトリ https://github.com/Ryomasao/gittest

merge・rebase運用について

以下のブランチがある。

master: 最新のブランチ。 feature/a1:masterから派生したブランチ。200X年1月向けの案件 feature/a2:masterから派生したブランチ。200X年3月向けの案件

feature/a1feature/a2は同時期に開発開始をしたため、masterから同じタイミングでブランチを切ってる。

feature/a1のブランチでHello.mdに改修を行った。2commit。

> git log
commit acc4c00ebdf8d046b70158f54aba48fd9e25bc3c (HEAD -> feature/a1)
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:29:12 2020 +0900

    a1-commit2

commit b3ec19db67e72fdfce73f95b672d837842426774
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:28:48 2020 +0900

    a1-commit1

commit e9080851f05d3d0eb4619cd64ac29f4d9b827196 (origin/master, origin/HEAD, master, feature/a2)

同じくfeature/a2のブランチでは別ファイル、Other.mdを作成した。

> git log
commit 720f0c6220d862b8409e1c7fb4f9ed17abbe7b44 (HEAD -> feature/a2, origin/feature/a2)
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:30:57 2020 +0900

    a2-commit2

commit 47aa7473bae9bf26c493ab0b438eeb1346758e04
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:30:43 2020 +0900

    a2-commit1

無事、feature/a1の改修が終わったので、masterにマージした。 ※github上でPR�を作成してマージ。

このとき、masterのログをみると、feature/a1のコミットログと同じコミットIDがつくられてることがわかる。 尚、もとのmasterfeature/a1を切ったときから変わってないので、マージコミットがないfast-forwardマージも可能だけれども、githubのマージボタンで、マージコミットをつくるやつを選択したので、マージコミットができれる。

> git log
commit 7163522b501f57bb3dbdd5961bd9d7d67a0a2800 (HEAD -> master, origin/master, origin/HEAD)
Merge: e908085 acc4c00
Author: Ryomasao <konoemario@gmail.com>
Date:   Mon May 11 11:34:00 2020 +0900

    Merge pull request #9 from Ryomasao/feature/a1

    Feature/a1

commit acc4c00ebdf8d046b70158f54aba48fd9e25bc3c (origin/feature/a1, feature/a1)
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:29:12 2020 +0900

    a1-commit2

commit b3ec19db67e72fdfce73f95b672d837842426774
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:28:48 2020 +0900

    a1-commit1

本題

さて、feature/a2feature/a1の修正を取り込みたい。

方法1 feature/a1を取り込んだmasterからリベース。

git rebase master

履歴はfeature/a1が終わった後のmatserから開発がスタートしているようになる。

> git log
commit cc56547415164a8998834b30a878e19e171bd58b (HEAD -> feature/a2)
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:30:57 2020 +0900

    a2-commit2

commit a8ff98a5f8132dea8244d47e7f85cf87c1e07eb5
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:30:43 2020 +0900

    a2-commit1

commit 7163522b501f57bb3dbdd5961bd9d7d67a0a2800 (origin/master, origin/HEAD, master)
Merge: e908085 acc4c00
Author: Ryomasao <konoemario@gmail.com>
Date:   Mon May 11 11:34:00 2020 +0900

    Merge pull request #9 from Ryomasao/feature/a1
    
    Feature/a1

commit acc4c00ebdf8d046b70158f54aba48fd9e25bc3c (origin/feature/a1, feature/a1)
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:29:12 2020 +0900

    a1-commit2

commit b3ec19db67e72fdfce73f95b672d837842426774
Author: ryoji.yamauchi <ryoji.yamauchi@balconia.co.jp>
Date:   Mon May 11 11:28:48 2020 +0900

    a1-commit1

いいところ

  • 履歴がわかりやすい

問題点

問題がいっぱいありそうなんだけど、いまいち理解できない。 まず、feature/a2のコミットIDがリベース前と後でかわる。コミットIDは、その時点のリポジトリの状態のハッシュ値なので、リベースすると、feature/a1でHello.mdがあった状態で、さらにfeature/a2の対応をいれたことになるので、開発したときの状態が異なる。

おそらくfeature/a2が、作業者1人が扱ってるブランチなのか、複数人で触ってるブランチなのかで、扱いが変わる気がする。 複数人っていうのは、feature/a2からさらに派生して、featue/a2-hogeとか切る場合のことね。

↓これがわかりやすい。 https://frasco.io/why-you-should-stop-using-git-rebase-535fa30d7e25 https://yakst.com/ja/posts/18

つまり、リベースする前にテストが通ってたとあるコミットは、リベース後に、テストがこけるコミットになってる可能性がある。 これが起因して↓のことも言える気がする。

https://yakst.com/ja/posts/18

なので一人で作業するブランチであれば、責任もってリベースでもいいけど、複数人で運用するブランチに対して歴史を変えるリベースはよろしくないんじゃないかってことかな。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment