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

Git 如何删除不需要的提交和合并,git,Git,我有以下提交顺序: A---B---D---E---G---H--- \ / \ C---/ F--- 提交D引入了不正确的更改,合并提交E将其转发给F和G。 我想完全删除d和E提交。 我们可以做些什么: A---B---C---G---H--- \ F--- 你需要重新设置——很难提交散列 然后G和H提交 在这之后,你需要用flag-f推动你的分支 您正在修改历史记录。如果这段历史没有出现在任何其他回购协议中,那没关

我有以下提交顺序:

A---B---D---E---G---H---
     \     / \
      C---/   F---
提交D引入了不正确的更改,合并提交E将其转发给F和G。 我想完全删除d和E提交。 我们可以做些什么:

A---B---C---G---H---
         \
          F---
  • 你需要重新设置——很难提交散列
  • 然后G和H提交
  • 在这之后,你需要用flag-f推动你的分支

    • 您正在修改历史记录。如果这段历史没有出现在任何其他回购协议中,那没关系,否则请确保您知道自己在做什么

      C
      处用
      HEAD
      签出名为
      my\u better\u history
      的分支 git签出-b我的\u更好\u历史记录C

      引入所需的提交: 吉特樱桃皮克酒店

      检查你的工作。如果原始分支被称为
      master
      ,则可以执行
      git diff tool master
      以确保状态相同。如果一切顺利,你可以将你的新历史作为正式历史。假设您从branch
      master
      开始,然后可以执行以下操作:

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

      现在,master将获得所需的历史记录。

      这不是完整的答案,您必须找出其余的答案。。但是

      解决方案1:

      git revert C
      git revert D 
      
      如果你同意修改hostory-!!在某些工作流中,这是非常糟糕的。。在某些情况下,这与你在当地设立分支机构等情况不同。。但是要小心

      您可以使用nice工具交互重基:

      git rebase -i HASH_OF_B
      
      您可能会看到如下内容:

      pick H
      pick G
      pick F
      pick D <-- remove this line
      pick C 
      pick A
      
      你是安全的——不会改变历史等等


      您必须在两个分支上执行此操作—在F分支上,也在H分支上—不确定如果您引入了关于D的任何合并更改,合并提交会发生什么情况。

      谢谢。是的,我忘了提到,所有这些都在我的本地回购协议上。