2012-03-21 109 views
27

我犯了一個錯誤,並對git進行了一些我不應該犯的錯誤。 我做了提交後,我推送了我的更改。 然後我使用以下命令嘗試重置我的更改。使用git reset後無法推送更改--hard

git reset --hard head 

現在我要推這個「重置」到遠程倉庫使用此命令:

git push MyBranch 

但我收到此錯誤:

remote: error: denying non-fast-forward refs/heads/branch (you should pull first) 

我試圖用這個命令沒有任何成功:

git push -f "origin" 

有什麼想法我可以做什麼?

回答

53
git push -f origin myBranch 

,就可以(前提是你知道這可能是危險的,如果MyBranch被別人在自己的回購已經取出)

注意:如果您的遠程回購( '原點')有其config組與

receive.denyNonFastForwards true 

它會拒絕任何非快速推送(即使強制推送)。
請參閱「Is there a way to configure git repository to reject 'git push --force'?」。


OP user654019報告

I managed to solve the problem this time by setting denyNonFastForwards to false and using -f to force the push

如果OP沒有進入回購,他/她必須:

例如:

$ git revert -m 1 [sha_of_C8] 
Finished one revert. 
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'" 
1 files changed, 0 insertions(+), 2 deletions(-) 

revert a merge

完整討論關於如何恢復合併可以be found here

該想法仍然只生成新的提交,包括一個還原由合併提交引入的更改。
然後,您可以推送新的提交,作爲快進的改變。

+0

它沒有工作。可能配置在存儲庫中設置。兩個quesytion:如果denyNonFastForwards是真的,解決這個問題的最好方法是什麼?我怎樣才能恢復一些mchanges(合併)並創建一個新的提交? – mans 2012-03-21 12:31:01

+0

@ user654019:通過創建一個新的提交組成,取消你以前的提交:使用[git revert](http://linux.die.net/man/1/git-revert):你將能夠推動作爲快速推進的新提交。 – VonC 2012-03-21 12:34:15

+0

原來的提交是一個合併,當我試圖做回覆-m 1 我得到了一些錯誤 – mans 2012-03-21 12:37:01

3

你需要指定哪些裁判要推:

git push -f origin MyBranch