お試しリポジトリ https://github.com/Ryomasao/gittest
以下のブランチがある。
master
: 最新のブランチ。
feature/a1
:master
から派生したブランチ。200X年1月向けの案件
feature/a2
:master
から派生したブランチ。200X年3月向けの案件
feature/a1
とfeature/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がつくられてることがわかる。
尚、もとのmaster
がfeature/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/a2
に feature/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
つまり、リベースする前にテストが通ってたとあるコミットは、リベース後に、テストがこけるコミットになってる可能性がある。 これが起因して↓のことも言える気がする。
なので一人で作業するブランチであれば、責任もってリベースでもいいけど、複数人で運用するブランチに対して歴史を変えるリベースはよろしくないんじゃないかってことかな。