2016-02-05 102 views
1

我做了幾個提交(比方說ID:1,2,3,4),然後意識到我在提交3時犯了一個錯誤,並希望返回到代碼版本提交2.Git reset - 分支在主設備後面

我所做的:

git reset --hard 2 

現在git的說:

On branch master. 
Your branch is behind origin/master by 11 commits and can be fast forwarded. 

我想知道我怎麼能 「推」 我的代碼,以便每個人都有這個版本。

+0

混帳說:在遠程分支機構中,有對當前的承諾(id爲'2'頂11條)。你想垃圾掉這11個提交嗎?或者你想從列表中刪除提交'3'? – LeGEC

回答

1

根據你所需要的:

一個辦法,只是刪除從歷史提交3:

$ git rebase -i <id of commit 2> 
# an editor will open a text editor, asking you to describe what you want to do 
# delete the line containing <commit 3>, save and exit 

git將輸出一些消息表明它的進展,並且最終應該包含一個新的主分支,其中包含除<commit 3>之外的所有提交。

然後,您將需要添加--force-with-lease選項來推動這個編輯master分支:

git push --force-with-lease origin master 
+1

我認爲最好是習慣使用'--force-with-lease'而不是'--force'來防止無意中破壞別人推送的提交... – Philippe

+0

這會對其他人造成問題嗎? – BKSpurgeon

+0

@BKSpurgeon:是的,這可能會給其他人帶來問題。第一個是:你可以刪除一些其他的提交。第二個是:這將修改其他用戶可見的歷史記錄,並要求他們手動處理它。 Google for'git push --force' – LeGEC

2

git push -f origin強制推動和改變您的回購的歷史。 可能會更好,只是git revert 2承諾保持歷史。

+0

我肯定會建議去'git revert'路線。推動力幾乎不是一個好主意,並且需要在其他人的本地機器上採取進一步措施。 –

+0

如果對其他貢獻者來說沒什麼大不了的,我寧願長期推動保持良好的歷史(因爲有一個好的歷史被低估了!),而不是做一個短視的動作回覆。 ..但是你是對的,如果你獨自一人在你的分支,或者你可以警告或者與別人做出決定,那麼最好這樣做。 – Philippe

1

你得到的消息表明你已經推送提交3和4,所以硬重置是而不是你想做什麼 - 該命令改變了歷史,你不應該嘗試改變提交的歷史已被推動。相反,做一個git pull(以便你是最新的)。然後git revert 3撤消更改您所做的承諾3.