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
以确保状态相同。如果一切顺利,你可以将你的新历史作为正式历史。假设您从branchmaster
开始,然后可以执行以下操作:
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的任何合并更改,合并提交会发生什么情况。谢谢。是的,我忘了提到,所有这些都在我的本地回购协议上。