[GIT] Wrong merge and wrong branch

人總是會有手殘眼糊腦弱的時候,總要有補救辦法。

今天遇到的狀況像是下圖這樣,原本是把 3d 這個 branch 做好的功能 merge 回去 ui 這條上,然後要繼續開發 3d 這個 branch 的新功能,不過做完 merge 之後忘記切回 3d 這個 branch,繼續 commit & push,然後就錯了…
Image 4

解決的方法可以把 ui 這條拉回去前面的 commit
Image 6
這樣的話只要透過

$ git checkout ui
$ git reset --hard 9ca06c3
$ git push -f

但這樣的話 merge 跟最新 commit 就都不見了,即使只有拉回去到 merge 那個點也是一樣。

所以解決的方式只好強制把 3d 這個 branch 也拉到跟 ui 一樣地方去
Image 7

$ git checkout ui
$ git branch 3d -f
$ git checkout 3d
$ git push

然後再把 ui 這條 branch 往前面拉,變成像這樣
Image 8

$ git checkout ui
$ git reset --hard 9ca06c3
$ git push -f

在ui branch上有新的commit之後就會變成這樣
Image 9

其他可以參考https://blog.yorkxin.org/posts/git-rebase.html