我假設這裏沒有插話其他人之間犯你的工作,以及你的不良承諾在回購的歷史中形成一個連續的範圍。否則,你將不得不變得更加複雜。我們假設您的歷史記錄如下所示:
e82401b - (master, HEAD) My most recent private commit
...
bc2da37 - My first private commit
cf3a183 - (origin/master) My most recent bad public commit
...
292acf1 - My first bad public commit
82edb2a - The last good public commit
我們想要做的第一件事就是吹掉您尚未公開的提交。你可以用下面的命令做到這一點(注意,您的更改將會消失,應視爲不可恢復的):
git reset --hard cf3a183
相同(更易讀):
git reset--hard origin/master
現在你的觀點該存儲庫與origin/master
中的視圖一致。您現在想要恢復您的不良公開更改並將其作爲恢復提交發布。這些說明用於創建單個恢復提交。
您可以使用git revert --no-commit a..b
恢復開始在所有提交的提交後a
(注意!),並在結束,幷包括提交b
。將會爲您提交回復。所以,在這裏,我們會做:
git revert --no-commit 82edb2a..HEAD
,或等效:
git revert --no-commit 292acf1^..HEAD
記住,HEAD
現在指向同一個地方origin/master
。
運行revert
命令後,您現在已經完成了更改並準備好提交,因此只需運行一個簡單的git commit -m "Reverting those bad changes I accidentally pushed and made public"
即可。
謝謝,這是我需要的那種信息。還有一個問題:我如何獲得(主,頭)或(起源/主)信息,以便我可以知道何時執行這兩組命令? –
@Pat最簡單的方法是建立一個'git log'的替代形式來一目瞭然地獲取這些信息。您可以閱讀[這裏](https://www.kernel.org/pub/software/scm/git/docs/git-log.html)關於使用的格式。一個好的起點是這樣的:'git log --pretty =「%h%Cgreen%d%Creset%s%an%Cblue(%cr)」' –