2016-07-01 43 views
3

我已經提交的順序如下:如何刪除不需要的提交和合並

A---B---D---E---G---H--- 
    \ /\ 
     C---/ F--- 

提交d引入不當的變化和合並提交Ë其轉發到F和G 我想刪除d E正式承諾。 什麼可以做的有:

A---B---C---G---H--- 
     \ 
      F--- 

回答

0

您正在修改歷史記錄。如果該歷史不存在於其他任何回購站點上,那很好,否則確保你知道你在做什麼。

結帳在C git的結帳-b my_better_historyÇ

命名爲my_better_historyHEAD了分公司,在你想要的提交攜帶: git的櫻桃挑選G H

檢查所做的工作。如果您的原始分支名爲master,則可以執行git diff-tool master以確保狀態相同。如果一切都很好,你可以讓你的新歷史成爲你的官方歷史。比方說,你開始與分支master,那麼你可以做:

git checkout master 
git reset --hard C#now your master is back to the common history point. 
git merge my_better_history 

現在主人將有希望的歷史。

+0

感謝。是的,我忘了提及,所有這些都在我本地的回購中。 – msek

0
  • 你需要的復位 - 硬到B_COMMIT_HASH
  • 然後cherry-pick G和H提交
  • afret這一點,你會deateched你需要把你的brache with flag -f
0

這不是完整的答案,你將不得不找出休息..但HTH

解決方案1:

如果您沒有問題修改hostory - !在一些工作流程中,這是非常糟糕的..在一些它不是 - 就像當你有你的本地分支等..但要小心

您可以使用好的工具互動變基:

git rebase -i HASH_OF_B 

你會看到很可能是這樣的:

pick H 
pick G 
pick F 
pick D <-- remove this line 
pick C 
pick A 

,您只需將刪除它們d的那些(希望這會工作這方式當你有多個孩子等) - 要非常小心,我不知道這會做什麼..

解決方案2:

git revert C 
git revert D 

,你是安全的 - 而不是改變歷史等。

你將不得不這樣做的兩個分支 - 在F分支,也對H分支 - 不知道會發生什麼情況合併提交,如果你推出任何關於d合併更改..