Git / Git Extension中的“squash”和“fixup”有什么区别?

我已经使用Git扩展了一段时间(这是真棒!),但我还没有find一个简单的答案如下:

有时,在input提交信息时,出现拼写错误。 我的朋友向我展示了如何通过以下方式修复它(在Git Extentions中):

右键单击提交>高级>修复提交

在这里输入图像说明

然后,我只是检查框“修改”,并重写我的信息,瞧! 我的提交信息是固定的。

然而,这另一个选项“壁球犯”…我一直想知道它是什么?!

我的问题是:

有人会简单地解释一下Git / Git Extentions中 Squash commitFixup commit的区别吗? 他们看起来很像“类似于我: 在这里输入图像说明在这里输入图像说明

我不知道Git Extensions具体做了什么,但是git rebase有一个选项可以自动压扁或修改提交的壁球! 或修正! 前缀分别为:

--autosquash, --no-autosquash When the commit log message begins with "squash! ..." (or "fixup! ..."), and there is a commit whose title begins with the same ..., automatically modify the todo list of rebase -i so that the commit marked for squashing comes right after the commit to be modified, and change the action of the moved commit from pick to squash (or fixup). 

squash和fixup的区别在于,在rebase期间,squash操作会提示你合并原始消息和squash commit,而fixup操作会保留原始消息,并且丢弃fixup commit消息。

简单地说,当重新绑定一系列提交时,每个提交标记为一个squash ,使您有机会使用它的消息作为pickreword提交消息的一部分。

当您使用fixup ,来自该提交的消息将被丢弃。

从git-rebase doc :

如果要将两个或多个提交合并成一个提交,请用“squash”或“fixup”replace第二个和后续提交的命令“pick”。 如果这个提交有不同的作者,那么这个提交将被归于第一个提交的作者。 build议提交的提交消息是第一次提交和“squash”命令的提交消息的连接,但省略了提交“fixup”命令的提交消息。

我用git扩展修饰,不能把它压缩到一个。 要做到这一点,我不得不求助于命令行,发现这个post很有帮助

 git rebase -i Head~2 

这是交互式转化,并注意以下几点:

  • 这里〜2是指你要在这个操作中涉及多less次提交,包括当前的头部
  • 您必须编辑后续的交互式编辑窗口,将第一个项目保留为“pick”,并用“squash”replace后续行。 如果这是不透明的,上面的链接中的说明更清楚。