Git / Git Extension中的“squash”和“fixup”有什么区别?
我已经使用Git扩展了一段时间(这是真棒!),但我还没有find一个简单的答案如下:
有时,在input提交信息时,出现拼写错误。 我的朋友向我展示了如何通过以下方式修复它(在Git Extentions中):
右键单击提交>高级>修复提交
然后,我只是检查框“修改”,并重写我的信息,瞧! 我的提交信息是固定的。
然而,这另一个选项“壁球犯”…我一直想知道它是什么?!
我的问题是:
有人会简单地解释一下Git / Git Extentions中 Squash commit和Fixup 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
,使您有机会使用它的消息作为pick
或reword
提交消息的一部分。
当您使用fixup
,来自该提交的消息将被丢弃。
从git-rebase doc :
如果要将两个或多个提交合并成一个提交,请用“squash”或“fixup”replace第二个和后续提交的命令“pick”。 如果这个提交有不同的作者,那么这个提交将被归于第一个提交的作者。 build议提交的提交消息是第一次提交和“squash”命令的提交消息的连接,但省略了提交“fixup”命令的提交消息。
我用git扩展修饰,不能把它压缩到一个。 要做到这一点,我不得不求助于命令行,发现这个post很有帮助
git rebase -i Head~2
这是交互式转化,并注意以下几点:
- 这里〜2是指你要在这个操作中涉及多less次提交,包括当前的头部
- 您必须编辑后续的交互式编辑窗口,将第一个项目保留为“pick”,并用“squash”replace后续行。 如果这是不透明的,上面的链接中的说明更清楚。