2016-02-05 54 views
1

後刪除遠程提交一個git status給了我這樣的事情:如何,就是犯

commit XXXXX 
Author: AAAA 
Date: Thu Feb 4 16:47:06 2016 -0500 

commit YYYYY 
Author: BBBB 
Date: Thu Feb 4 16:47:05 2016 -0500 

commit ZZZZZ 
Author: CCCC 
Date: Thu Feb 4 16:47:04 2016 -0500 

我只是想去掉由YYYYY帶來的變化,那就是我想要避免XXXXX帶來的變化。

+0

可能重複的[恢復Git回購到以前的提交](http://stackoverflow.com/questions/4114095/revert-git-repo-to-a-previous-commit) – mohammedkhan

回答

0

在這種情況下可以使用交互式底座。

運行以下命令:

git rebase -i YYYY~ 

你將面臨提交列表。使用落實YYYY刪除該行。然後保存並退出。

該提交現在在本地「刪除」。更好地說出剛剛發生的事情是,你所在的分支已被重寫,所以在YYYY之前的所有提交都將有一個新的SHA1哈希。

此時您需要強制推送,因爲歷史記錄已被重寫。如果這是在主分支:

git push -f origin master 

請注意,如果其他人也從這個分支拉一個典型的拉力將不能正確地運行它們,因爲該分支的末端將是不可到達與當地的拷貝工作科。如果有其他人在這個項目上你應該讓他們知道什麼是你操作前做

git fetch 
git rebase origin/master 

他們可以變基與新的主頂部的地方分支。

編輯:如果你想實際刪除提交交互式底座是一個不錯的選擇。但@ alextercete的方法使用revert是優越的,因爲你不必重寫歷史。

3

可以revert由引入的變革承諾:

git revert YYYYY 

這將創建一個新的提交,通常優於做重訂,如果你已經被推更改到一個長壽命的遠程分支(如master)。

+1

+1這個答案;您希望執行恢復提交,而不是嘗試刪除提交,因爲它已經被推送(並且其他人已經基於它們的提交)。只有更正是你想在你的情況下'git恢復YYYYY'。 –

+0

謝謝,我編輯瞭解決提交參考的答案。 – alextercete

+0

但是,這也會恢復提交XXXXX的更改?我想保留提交的更改XXXXX – victorpacheco3107