如題,手賤把還沒有完成的程式碼從分支merge到了master上,並且git push到了github上,之後在dev上繼續完善程式碼,然後想撤回這個合併的時候發現撤回本地的合併之後,不能push到github上了,顯示有衝突,不知道什麼原因。
巴扎黑2017-05-02 09:49:43
如果你是在本地 merge 的,那你可以通過 git reflog
查看你的历史操作,然后通过 git reset --hard HEAD@{n}
回退到 reflog 里面的第 n
步
然後,git push origin master -f
就可以把遠端的 master 退回到之前的狀態了
其實,既然你是 merge 的,那麼就會產生一個 merge commit。你也可以先在本地 git checkout master
, 这时候你本地的 master 也应该是最新的。先 git log
看下历史记录,然后根据 commit hash,git reset --hard xxxxxx
回退一下。
然後,同樣地,git push origin master -f
就可以更新遠端的 master了
兩種方式同理,因為你刪掉了一個 commit,而遠程是存在這個 commit 的,這時候兩百年的歷史信息是對不上的,因此你不能直接 git push origin master
除非你在这个 commit 之后新加了一个 commit,手动修改代码,回退到 merge 之前的状态,这样你不需要 -f
,可以直接 git push origin master
更新