2017-03-17 26 views

回答

0

您可以使用rebase爲:

git rebase -i HEAD~3 

你再有類似

pick #hash3 Your commit 1 title 
pick #hash2 Your commit 1 title 
pick #hash1 Your commit 1 title 

如果你想刪除例如2款#hash1#hash2,只需做:

pick #hash3 Your commit 1 title 
drop #hash2 Your commit 1 title 
drop #hash1 Your commit 1 title 

保存。

警告
如果衍合的提交#hash3之前(這是最古老的在這裏),如果你已經推,你必須push帶強制標誌:git push -f。如果其他人在同一個遠程分支上工作,這可能非常危險。如果你獨自一人在回購或至少在樹枝上,繼續前進;)

+0

來自合併分支的所有提交都出現在rebase中。我不得不用這種方法一個接一個地「放下」他們。 –

+0

啊所以你有很多來自合併的提交?那麼你可能想看看git reflog,你可能會在合併之前回來,但我不能在這裏引導你 – Maxime

1

您可以使用git revert <<sha hash of merge commit>> -m 1

中的1表示要保持合併的主線(或父母)提交對象。作爲恢復的結果,父級2引入的任何文件更改都將被刪除。主線分支上的其他提交所做的任何更改都不會受到影響。

git cat-file -p <<sha hash of merge commit>>

這將顯示您的父母。如果在git revert命令中使用1選項,將使用輸出中列出的第一個父項。

採用這種方法不會刪除/重寫您的歷史記錄,就像使用rebase方法一樣。

如果您已經分享了您的代碼,您應該採取這種方法。否則,您將面臨其他開發人員在未來的提交中重新引入不需要的代碼的風險。

在共享代碼上重新激活還會爲其他開發人員引入重複的提交對象。這是非常皺眉。

要恢復的注意事項是,如果您希望稍後介紹原始合併中的更改,則需要恢復恢復。