假设提交的结构如下所示:
B'---C' X'
/ \ / \
A---B---C---D---...---X---Y---Z(master)
现在我需要去除 A 和 X 之间的所有提交,
X'
/ \
A---X---Y---Z
AFAIK,至少有两种方法可以实现:
- git rebase -i A
- git branch -f new_branch A; git rebase --onto master X
但总有一些冲突需要我手动处理。
因为我只想清除 A 之后和 X 之前的所有提交,并且我不需要在每次提交后更改任何 git 跟踪结果(例如,新生成的提交 X 与旧的 X 提交共享相同的内容),有更简单的方法吗?
最佳答案
注意:此解决方案会将您想要“剥离”到 X 中的提交压缩,以便新的 X 提交和所有后续提交的文件都处于与现在完全相同的状态。如果这不是您想要的,请参阅我的 other answer .
git checkout -b temp A
git merge X --squash
git commit -C X # Create new x commit
git checkout master
git rebase --preserve-merges --onto temp X # Rebase onto new X commit (should produce no conflicts)
git -d temp
关于git - 我怎样才能去掉几个旧的提交,但在 git 中保持所有其他提交不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214168/