2011-04-05 41 views

回答

4

恢復合併提交可能會非常棘手 - 特別是如果它們是惡意合併,這聽起來像是這樣。如果你能擺脫它,把它們吹走更容易。這裏有兩大選擇:

  • git reset --hard <good-commit>。這需要一些協調,因爲任何其他開發人員拉動壞分支也將需要reset --hard(如果他們已經做了工作,他們必須小心保存,等等)。如果你的同事試圖做一些好事,你可能會重做他的合併 - 但這次做得對!

  • 手動恢復到合併前。從頂層git checkout <good-commit> .,然後git commit - 一定要寫出一條好消息來描述你剛剛完成的工作。你正在做出一個承諾,把所有事情都恢復到這個良好的狀態,但是從那時起就保留了所有的歷史,這樣人們就能夠很好地拉動它。如果你這樣做,注意就Git而言,你仍然合併了你的同事合併的任何東西。如果其中一些合併的提交實際上是很好的工作,並且您仍然希望包含它們,那麼最簡單的事情可能是在手動恢復提交之上挑選它們。

最後,如果這兩個都不滿意 - 如果你不想被吹走歷史,但你也想重返一些你的同事試圖合併,但不挑肥揀瘦..你可以結合這兩者。這個想法仍然是在主控制器之上進行手動恢復提交,但是要做到合併應爲所導致的狀態,而不是合併之前的狀態。

# create a new branch, starting from the good commit 
git checkout -b temp <good-commit> 

# redo the merges, but do it right 
# make sure your work tree is how you want it after the merge(s) 
git merge ... 

# switch back to master 
git checkout master 

# get your work tree into the good state 
git checkout temp . 

# and commit that 
git commit 
+0

我正在'git checkout .'然後'git commit'。我想他明天將不得不做他的合併/重新工作。謝謝。 – hughdbrown 2011-04-05 03:24:26

+0

@ hughdbrown:請閱讀該段的其餘部分。 Git認爲這些提交已經合併,所以試圖再次合併它們現在不起作用。你會(或他會)必須挑選它們。 – Cascabel 2011-04-05 03:37:54

+0

是的,我知道他不能自動應用他的更改,但必須手工重新創建或櫻桃挑選它們。 – hughdbrown 2011-04-05 17:47:56