git交互式编辑vs break



我试过在谷歌上搜索这个,但没能找到满意的答案。

我想知道在git rebase -i的交互模式下,editbreak之间有什么区别。

根据评论,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,但允许您修改最终结果。然后继续并应用提交4
  • break:不应用commit 4(仅在恢复rebase时应用)

如果break单独在其行上,那么是的,它可以类似于提交3上的edit,前提是您执行git commit --amend(因为提交3已经在前一行中精心挑选)

但随后git rebase --continue(在add+commit --amend之后)将由于所述break而停止。

正如Dylan Young在评论中所说:

它允许您在execmerge之后立即中断,这在以前是不可能的。


注意: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"继续。

bx 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是没有意义的。breaksquashfixupmergeexec之后变得有用。

这在引入break命令的提交消息中有解释:

rebase-i:引入"break"命令

edit命令可用于挑选提交,然后立即退出交互式rebase,退出代码为0,让用户修改提交,或者测试它,或者四处查看。

有时,如果没有精心挑选提交,这个功能就会派上用场,例如,甚至可以中断交互式重新基准在挑选提交之前,或在execmerge

该提交引入了该功能,作为全新的break命令

最新更新