我如何进行 git 替换而不是合并

How do I do a git replace rather than a merge

我正在尝试以简单的方式执行此操作并减少编码。我在 git

中有以下提交
A->B->C->D

我想基本上删除提交 C 并保留提交 D - 我正在努力寻找方法

我试过了

git checkout -b myfix B
git cherry-pick D
git checkout master
git merge myfix

当然,自从我合并后,提交 C 仍然存在。

有没有办法说用 myfix 分支替换 master?

甚至另一种获取方法

A->B->D->[new commit]

交互式变基

$ git rebase -i HEAD~5

其中 -i 是交互式标志,HEAD~5 表示在交互式 rebase 中包含最后 5 次提交。

然后会出现提示,删除引用要删除的提交的行,保存并关闭。

还有

如果您只想返回本地提交,只需使用 git revert

git revert 是一个非常简单的工具,可以实现您想要的效果。 This writeup is a nice explanation on how it works and how to use it,但是这只是使用的问题:

git revert <commit>

其中 <commit> 是提交 ID,或者在您的情况下只是 HEAD~1。结果命令将是:

git revert HEAD~1

然后只需 git push 您的更改即可。