(わりと特殊な状況だと思うけど・・・)
安易なgit revertによる事故に遭遇したので備忘録をつける。
現象
開発ブランチをメインブランチにマージして、バグってたのでメインブランチをgit revertした。
その後、開発ブランチでバグを修正してメインブランチにマージし直したら、マージされないファイルが出た。
原因
git revertで戻したファイルが、それ以降の開発ブランチで編集されていなかったため、マージ対象にならなかった。
こんな状況
my-featureでXXX.rbとYYY.rbを編集してマージした状態
* commit 9965401bafd800bec9ea0ce8fa75d8d0d5c8af25
|\ Merge: 3d7c60f cf474a6
| |
| | Merge branch 'my-feature'
| |
| * commit cf474a61754a26e0ca053aeaff21a990fa3ff780
|/
| 開発コミット
M XXX.rb
M YYY.rb
|
* commit 3d7c60fd8127b32f96785093e17334a059cfc0e3
バグってたことが発覚したのであわててrevert
* commit b855c5e9ebee1117e33c0689309ba613d21c8dfe
| Revert "Merge branch 'my-feature'"
|
| This reverts commit 9965401bafd800bec9ea0ce8fa75d8d0d5c8af25, reversing
| changes made to 3d7c60fd8127b32f96785093e17334a059cfc0e3.
M XXX.rb
M YYY.rb
|
* commit 9965401bafd800bec9ea0ce8fa75d8d0d5c8af25
|\ Merge: 3d7c60f cf474a6
| | Merge branch 'my-feature'
| |
| * commit cf474a61754a26e0ca053aeaff21a990fa3ff780
|/
| 開発コミット
M XXX.rb
M YYY.rb
|
* commit 3d7c60fd8127b32f96785093e17334a059cfc0e3
"そのままの状態で"my-featureで作業を継続。ZZZ.rbを修正しないといけなかったので対応してマージしなおした。
* commit 724e3feb28195e61ca179784fea226106f8bf4fd
|\ Merge: b855c5e 11ac0c1
| |
| | Merge branch 'my-feature'
| |
| * commit 11ac0c10984ee49515ac5077d386ef671be4547f
| |
| | 修正漏れ対応
M ZZZ.rb
| |
* | commit b855c5e9ebee1117e33c0689309ba613d21c8dfe
| |
| | Revert "Merge branch 'my-feature'"
| |
| | This reverts commit 9965401bafd800bec9ea0ce8fa75d8d0d5c8af25, reversing
| | changes made to 3d7c60fd8127b32f96785093e17334a059cfc0e3.
M XXX.rb
M YYY.rb
| |
* | commit 9965401bafd800bec9ea0ce8fa75d8d0d5c8af25
|\ \ Merge: 3d7c60f cf474a6
| |
| | Merge branch 'my-feature'
| |
| * commit cf474a61754a26e0ca053aeaff21a990fa3ff780
|/
| 開発コミット
M XXX.rb
M YYY.rb
|
* commit 3d7c60fd8127b32f96785093e17334a059cfc0e3
この時点でmy-featureの作業が全部マージされた気になるが、実際はZZZ.rbの修正分しかマージされていない(XXX.rbとYYY.rbの変更分はすでにマージ済みなので)
解決方法
- 開発ブランチを使い続けるときは、開発ブランチでrevertするなり、対応を直接入れるなりしてマージする
- メインブランチにrevertを当てた場合は、開発ブランチを切り直して最初からやり直す
- rebaseしても同じかな