2012-03-16 76 views

回答

3

我認爲你可以在本地回滾和推動的結果:

$ git reset HEAD^ --hard 
$ git push REMOTE -f 

如果「遠程」是遠程名稱。

+3

你可以* *做到這一點,但它是不可取的,因爲誰比誰在此期間抓起提交將得到......嗯,以避免不好的話,比方說,「他們將不得不努力工作,從自己的行爲中恢復「。 :-)最好使用「git revert」來添加一個新的提交來撤消之前的提交。 (認爲​​「恢復」爲「添加一個提交的補丁是完全撤消前一次提交的動作」,因爲這就是它的原因。) – torek 2012-03-16 03:20:48

+0

@torek我一開始就想到這個,但我認爲shadowfax可能有其他目的,比如讓每個遠程提交都能夠正確運行,否則他會想到「還原和推送」。 – peter 2012-03-16 03:30:28

+1

我想你可能會對有多少人不理解'git revert'感到驚訝。另一方面,可能會有完全不同的動機(如David M. Syzdek的回答)。在某些情況下,沒有好的解決方案,只有最差的解決方案(根據情況而有所不同)。 – torek 2012-03-16 03:44:03

27

既然你已經推到提交遠程倉庫,最好的辦法可能是恢復的兩次提交,這樣你就不會創建誰已經從遠程倉庫拉任何人的任何問題。

示例使用以下提交歷史:

e512d38 Adding taunts to management. 
bd89039 Adding kill switch in case I'm fired. 
da8af4d Adding performance optimizations to master loop. 
db0c012 Fixing bug in the doohickey 

如果你只是想恢復的提交,而無需修改歷史,你可以做到以下幾點:

git revert e512d38 
git revert bd89039 

或者,如果你不」如果希望其他人看到您添加了kill開關然後將其刪除,則可以使用以下方式回滾存儲庫(但是,這會給已經從遠程執行您的更改的其他人帶來問題):

git reset --hard da8af4d 
git push origin -f localBranch:remoteBranch 

其中localBranch是當地分支機構的名稱,remoteBranch的遠程分支的名字。

+3

「爲管理添加嘲諷」引發了舊的(新的)諺語:「不要喝酒和推動」。 :-) – torek 2012-03-16 03:45:30

+6

@torek我可以說什麼,我既是一個承諾的飲酒者,也是一個飲酒提交者。 – 2012-03-16 04:19:09

0

首先輸入這個命令。

git log -n 4 

該命令將顯示您的最後4個提交與他們的SHA。在這之後輸入以下命令。

git rebase -i SHA_ID 

而不是SHA_ID鍵入您要刪除的提交之前的提交的SHA。

這個文件將打開後,在該文件的頂部,你會看到SHA和要刪除提交的消息。刪除此行並保存並退出文件。

當你這樣做,你必須加把勁。所以輸入以下命令。

git push -f origin master 

完成此操作後,您可以看到您的提交已被刪除。