我试过在谷歌上搜索这个,但没能找到满意的答案。
我想知道在git rebase -i
的交互模式下,edit
和break
之间有什么区别。
根据评论,edit
使用提交,但停止修改,而break
停止在指定位置。但是,之间的区别是什么
# Scenario 1
pick a9ca198 commit #1
pick 15948d1 commit #2
edit 2dbe941 commit #3 // this will apply commit #3 and then stop.
pick 33c012d commit #4
# Scenario 2
pick a9ca198 commit #1
pick 15948d1 commit #2
pick 2dbe941 commit #3
break // this will stop after commit #3
pick 33c012d commit #4
我都试过了,对我来说,它们似乎完全一样。
文档提到:
要中断rebase(就像"
edit
"命令所做的那样,但不需要先选择任何提交),请使用;CCD_ 7";命令
在您的情况下,差异是:
- 在提交3时使用
edit
,您仍然可以修改提交3的文件内容(在应用提交3之后)、提交(仍然提交3,但已修改/已修改),并在git rebase --continue
上继续应用(樱桃采摘)提交4 - 对于提交3之后的
break
,将不应用提交4。并且已经应用了commit 3(如果您在此时更改文件,添加并提交,则会创建一个新的commit,除非您执行git commit --amend
)
所以主要区别是:
edit
:应用commit 3,但允许您修改最终结果。然后继续并应用提交4break
:不应用commit 4(仅在恢复rebase时应用)
如果break
单独在其行上,那么是的,它可以类似于提交3上的edit
,前提是您执行git commit --amend
(因为提交3已经在前一行中精心挑选)
但随后git rebase --continue
(在add
+commit --amend
之后)将由于所述break
而停止。
正如Dylan Young在评论中所说:
它允许您在
exec
或merge
之后立即中断,这在以前是不可能的。
注意:break
是在Git v1.5.3-rc0中引入的,2007年6月,提交1b1dce4。
但命令break
本身要新得多:Git v2.20.0-rc0,2018年10月,提交71f8246
参见Johannes Schindelin(dscho
)的提交71f8246(2018年10月12日)和提交b8c0b21(2018年十月10日)
(由Junio C Hamano合并——gitster
——于2018年11月2日提交789b1f7)
"CCD_ 27";学习了一条新指令("insn")"
break
",用户可以将其插入待办事项列表中
点击后,命令会将控制权返回给用户。
rebase -i
:引入"break
"命令"
edit
"命令可用于挑选提交,然后立即退出交互式rebase,退出代码为0,让用户修改提交,或者测试它,或者四处查看。有时,如果没有精心挑选提交,这个功能就会派上用场,例如,甚至可以中断交互式重新基准在挑选提交之前,或紧接在"
exec
"或'merge
'。此提交引入了该功能,作为全新的"
break
"命令
参见";让我休息一下";。。。你给了我一个:
我只是想对您介绍
break
的想法表示感谢git rebase -i
的待办事项列表中的命令。我现在一直使用它。在此之前,我一直在使用
x bash
,在很多情况下,我都是在那个shell中使用git rebase --continue
,但结果并不太好当我终止所说的shell时(不过只是一条错误消息,什么都没有实际上因此而破裂)。这个功能是一件幸事。
或者:
'
x bash
'将启动另一个shell,这似乎是一件奇怪的事情。我一直在使用"
x false
"生成错误退出状态以中断重新基准并放入当前外壳中
然后"git rebase --continue
"继续。
b
比x false
短得多(我也不能在深夜将其作为x flase
运行,尽管这将是相同的我想,停止交互式重基线的效果)。
我使用break
做的一件事是edit
不能做的,那就是应用fixup
,然后做其他事情,比如更新代码审查。
例如,如果我有
pick commit1 feature x
pick commit2 feature y
pick commit3 fixup for feature x
我可以
$ git rebase --interactive
pick commit1 feature x
fixup commit3 fixup for feature x
break
pick commit2 feature y
然后
$ command-to-update-cr
$ git rebase --continue
请注意,您可以出于同样的目的使用exec
,但我更喜欢从放入命令行中获得的控制。
在您提供的示例中,您是正确的。在pick
之后使用break
与仅使用edit
是相同的。以这种方式使用break
是没有意义的。break
在squash
、fixup
、merge
或exec
之后变得有用。
这在引入break
命令的提交消息中有解释:
rebase-i:引入"break"命令
edit
命令可用于挑选提交,然后立即退出交互式rebase,退出代码为0,让用户修改提交,或者测试它,或者四处查看。有时,如果没有精心挑选提交,这个功能就会派上用场,例如,甚至可以中断交互式重新基准在挑选提交之前,或在
exec
或merge
。该提交引入了该功能,作为全新的
break
命令