Git - 从历史记录中删除提交但保留代码

Git - Remove commit from history but lesve the code

我在 VS2019

上使用 git

我想知道是否有办法删除旧提交但始终保留最新代码。原因是当我处理一个大的变化时,我在检查每个小步骤后做了很多提交,但最后当我点击查看历史并需要搜索一个旧的提交来比较变化时,这很烦人。我想删除特定的提交但保留更改。这样,我在历史上只会看到发展过程中的主要里程碑。有办法吗??

您似乎需要 git 变基功能。

如果您知道要压缩多少次提交,您可以使用

git rebase -i HEAD~N

您也可以在交互模式下进行:

git rebase --interactive HEAD~N

请注意,如果合并已经推送的提交,下一次推送可能会遇到问题。

详情请见:https://www.internalpointers.com/post/squash-commits-into-one-git

您可以遵循类似于“Git better with fixups " from Atul Sharma

的工作流程

对于相同步骤的增量改进的提交,使用git commit --fixup small step,它允许您"do a lot of commits after checking every small step"。

(在Git Extension in Visual Studio中可以看到)

但最后,您可以使用 git rebase --interactive --autosquash <First step commit> 清理所有这些小步骤(假设您还没有推送这些提交)

这样,您最终会得到一个更清晰的历史记录。

听起来在这些情况下,您正在开发一项新功能,在这种情况下,您应该使用分支+拉取请求方法进行开发。在拉取请求期间,您可以进行挤压合并。并非全部都在命令行中,但无论如何这可能是最好的。

如果您已经在功能分支中工作,那么我喜欢 的方法。