2016-02-19 59 views
0

我有一個壞的推送提交。
如何撤銷此提交,並返回到我的工作樹(之前)?git恢復後,工作樹保持不變

這將導致我右工作樹:

git checkout HEAD~1 

這將導致我右承諾,但工作樹是一樣的不必要的文件:

git revert HEAD~1 

如何徹底回滾到以前的承諾?

我的意思是,我不應該承諾分離HEAD,對吧? (在git checkout <commit>的情況下)

+0

你說你* *推壞的承諾,你想只回滾的變化在本地或遠程回購呢?兩者都不同。根據您的遠程repo權限,您可能無法刪除遠程repo的錯誤提交,您可能只能進行提交以解除更改。 –

回答

1

根據this answer,git revert HEAD是你應該使用的;但是,如果還原提交添加了任何文件或文件夾,它們將作爲未跟蹤文件留在工作副本中。要擺脫它們,請運行git clean(如this answer中所述)。

UPDATE:我在本地測試後編輯了必要的命令,只是簡單地編輯了git revert HEAD。應該不需要運行git clean。正如鏈接的答案所解釋的,git revert提交傳遞給它的提交的「反向合併」,所以如果HEAD~1是您想要的最終結果,則應該將HEAD傳遞到git revert

1

如果您想完全回滾到之前的提交併從歷史記錄中刪除錯誤提交。

git reset --hard HEAD~1

+0

OP表示他已經提交了錯誤的提交,因此重置會在他稍後嘗試推送更正的提交時導致問題。我更喜歡'git reset'自己,因爲我還沒有推出糟糕的提交,但是......似乎'git revert'在這種特殊情況下是更好的解決方案。 – evadeflow

+0

你可以強制推送到你的遠程分支上。 –

+0

當然,但是如果有人在此期間提出了'壞'提交,並且將_another_提交給它,那麼是不是會覆蓋其他開發者的提交?我認爲在基於嚴格請求的工作流程中,這不是一個這樣的問題,但是很多人仍然在使用一個共享分支的中央倉庫,而這個分支可以被多個人推送。 – evadeflow