2017-04-16 96 views
0

場景:最後兩個提交不好,必須刪除(本地和遠程)。工作樹必須回到HEAD〜2覆蓋當前的變化(讓我們假設它沒問題,或者它們已經被隱藏了)。我們還假設我是唯一一個在分支上工作的人,並且可以刪除遠程提交。刪除2最後提交,放棄本地更改,重置--hard vs結帳

之間有什麼區別:VS

git checkout HEAD~2 
git push origin +HEAD 

問題2

git reset --hard HEAD~2 
git push origin +HEAD 

什麼是推薦的語法(2017年4月)爲強制分支支的推動?

git push origin +HEAD 
vs 
git push origin MyBranchName --force 

回答

1

git checkout HEAD~2是去看看是怎麼回事(通過填充的工作目錄)在一定的過去犯下,但沒有改變歷史。你現在是一個獨立的頭狀態(閱讀它,因爲知道如何處理它是有用的)。

git reset --hard HEAD~2是你描述的和你想要的。

git push origin --force-with-lease是要走的路。 這與'--force'相同,但增加了驗證,您不會破壞別人沒有看到的歷史推送(您無法覆蓋您不會提取的歷史記錄)。這是絕對要走的路,本來應該是默認的,當你做' - 強制',但事實並非如此,當然是爲了兼容...

+0

雖然'結帳'命令令人困惑。在某些情況下,它必須用於放棄更改。例如:從最新的提交恢復myFilename:'git checkout HEAD - myFilename'。然而'git reset --hard HEAD - myFilename'不正確(致命:無法用路徑進行硬重置) – Polymerase