如何删除不需要的提交和合并

时间:2016-07-01 10:47:44

标签: git

我有以下提交顺序:

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

Commit D引入了不正确的更改并且合并提交E将其转发到F和G. 我想完全删除D和E提交。 可以做些什么:

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

2 个答案:

答案 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的任何合并更改,则不确定合并提交会发生什么。