Git Rebase中修复和删除提交的区别

Git Rebase中修复和删除提交的区别,git,version-control,commit,interactive,rebase,Git,Version Control,Commit,Interactive,Rebase,在使用交互式重基时,我不理解将一个提交固定到上一个提交中与从列表中删除所有其他提交之间的区别 据我所知,由于git提交会为每次提交拍摄整个存储库的快照,因此fixup只能创建我必须解决的合并冲突 从我创建并运行测试命令的测试存储库中,我通过使用fixup和完全删除这些提交(仅使用最后一个提交)获得相同的结果。修复的目的是什么?例如,如果您在代码的同一部分上有两次提交(第二次提交是对先前提交的代码的错误修复),那么仅保留第二次提交将不起作用,因为第二次提交找不到需要应用修改的基础代码 为了在两次修

在使用交互式重基时,我不理解将一个提交固定到上一个提交中与从列表中删除所有其他提交之间的区别

据我所知,由于git提交会为每次提交拍摄整个存储库的快照,因此fixup只能创建我必须解决的合并冲突


从我创建并运行测试命令的测试存储库中,我通过使用fixup和完全删除这些提交(仅使用最后一个提交)获得相同的结果。修复的目的是什么?

例如,如果您在代码的同一部分上有两次提交(第二次提交是对先前提交的代码的错误修复),那么仅保留第二次提交将不起作用,因为第二次提交找不到需要应用修改的基础代码

为了在两次修改中只保留一次提交,需要将第二次提交修复(合并)到第一次提交

资料来源(法文):


希望这个答案能对您有所帮助。

Squash与fixup基本相同,只是Squash让您编辑提交消息。“…fixup除了创建我必须解决的合并冲突外,没有其他作用。”除非您以某种方式重新排列快照,否则fixup不会创建合并冲突,否则,冲突基本上已经在每个快照中解决了,您只是将快照组合在一起。每当我使用fixup时,我都必须从每次提交中返回并修复合并冲突。我认为这与我以前遇到的合并冲突有关,但我不知道如何进行。你是否尝试重新设置合并提交的基础?正如我所说的,我认为(尽管我可能错了)重新设置基础基本上适用于提交之间的差异集,而不是整个快照。简单地从rebase列表中删除提交会丢弃该提交引入的更改,而fixup/squash会保留这些更改,但会将它们与以前的更改集结合起来……因此,您可以保留这些更改,但可以从图形历史记录中删除这些更改存在于它们自己的提交中的事实。简单地从重基中丢弃提交将同时删除历史记录和更改。