我一直在使用 Git Extensions 一段时间(真棒!)但我还没有找到以下简单答案:
有时,在输入提交消息时,请输入错误信息。我的朋友告诉我如何通过以下方式修复它(在Git Extentions中):
右键单击提交>高级>修复提交
然后我只需勾选“修改”框并重写我的留言即可!我的提交消息已修复。
然而另一个选项“壁球提交”......我一直想知道它的作用是什么?!
我的问题是:
有人会简单地解释一下 Git / Git Extentions 中 Squash commit 和 Fixup commit 之间的确切区别是什么?他们看起来像...... “相似”给我:
答案 0 :(得分:121)
我不知道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
操作将提示您组合原始和壁球提交的消息,而fixup
操作将保留原始消息并从修正提交中丢弃该消息。
答案 1 :(得分:54)
简单地说,当重新定位一系列提交时,每个提交标记为squash
,使您有机会将其消息用作pick
或reword
提交消息的一部分。
当您使用fixup
时,将丢弃该提交的消息。
答案 2 :(得分:13)
如果要将两个或多个提交折叠成一个,请用“squash”或“fixup”替换第二个和后续提交的命令“pick”。如果提交具有不同的作者,则折叠的提交将归因于第一次提交的作者。折叠提交的建议提交消息是第一次提交的提交消息和使用“squash”命令的提交消息的串联,但是使用“fixup”命令省略了提交的提交消息。
答案 3 :(得分:1)
我修改了git扩展,无法将许多提交压缩成一个。为此,我不得不求助于命令行并找到this post有用的
git rebase -i Head~2
这是交互式rebase,请注意以下内容:
答案 4 :(得分:0)
为什么不问git本身呢?
当您使用git-bash
进行基准调整时,它会显示:
pick 512b1d7 (some comment)
# Rebase 621b2e4..512b1d7 onto 621b2e4 (1 command)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
D:/code/fenixito-legacy-api/.git/rebase-merge/git-rebase-todo [unix] (11:57 23/10/2019) 1,1 start
"D:/code/xxx/.git/rebase-merge/git-rebase-todo" [UNIX] 27L, 1170C
所以您看到了:
s,squash =使用提交,但可以合并到以前的提交中
f,fixup =类似于“ squash”,但丢弃此提交的日志消息
答案 5 :(得分:0)
如果问题是执行git rebase --interactive时git中squash
和fixup
有什么区别,那么答案就是 commit message < / strong>。
s, squash <commit>
=使用提交,但可以合并到以前的提交中
f, fixup <commit>
=类似于“壁球”,但丢弃此提交的日志消息
例如:
pick 22a4667 father commit message
squash 46d7c0d child commit message # case 1
# fixup 46d7c0d child commit message # case 2
在情况1 中重新定位后的 commit消息为:
father commit message
child commit message
情况2的提交消息为:
father commit message
# no sub messages