我有以下提交顺序:
A---B---D---E---G---H---
\ / \
C---/ F---
Commit D引入了不正确的更改并且合并提交E将其转发到F和G. 我想完全删除D和E提交。 可以做些什么:
A---B---C---G---H---
\
F---
答案 0 :(得分:0)
你正在修改历史。如果该历史记录不存在于任何其他回购中,那很好,否则请确保您知道自己在做什么。
在my_better_history
结帐HEAD
C
分支
git checkout -b my_better_history C
带来您想要的提交: git cherry-pick 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
现在,主人将拥有所需的历史记录。
答案 1 :(得分:0)
这不是完整的答案,你必须弄清楚其余的......但是HTH
解决方案1:
如果你可以修改主机 - !!在某些工作流程中,这是非常糟糕的......有些情况并非如此 - 就像您拥有本地分支机构等...但小心 !!
您可以使用漂亮的工具交互式rebase:
git rebase -i HASH_OF_B
您可能会看到类似这样的内容:
pick H
pick G
pick F
pick D <-- remove this line
pick C
pick A
你只会删除那些D(希望它会以这种方式工作,当你有多个孩子等) - 要非常小心,我不知道这会做什么.. < / p>
解决方案2:
git revert C
git revert D
你安全 - 不改变历史等。
您必须在两个分支上执行此操作 - 在F分支上以及在H分支上 - 如果您引入了有关D的任何合并更改,则不确定合并提交会发生什么。