我试着在谷歌上搜索这个问题,但找不到满意的答案。
我想知道在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
我试过这两种,对我来说,它们似乎完全相同。
4条答案
按热度按时间wn9m85ua1#
文件中提到:
要中断变基(就像“
edit
“命令所做的那样,但没有首先选择任何提交),请使用“break
“命令。在你的情况下,区别是:
edit
,你仍然可以修改提交3的文件内容(在应用提交3之后),提交(仍然是提交3,但是修改/修改),然后继续在git rebase --continue
上应用(挑选)提交4。break
,提交4将不会被应用。提交3已经被应用了(如果你在此时修改文件,添加并提交,那将创建一个新的提交,除非你做一个git commit --amend
)。所以主要的区别是:
edit
:应用提交3,但允许您修改最终结果。然后恢复并应用commit 4。break
:不应用commit 4(仅在恢复rebase时应用)如果
break
在它的行上是单独的,那么是的,它可以类似于提交3上的edit
,只要你做一个git commit --amend
(因为提交3已经在前一行中被选中了)但是
git rebase --continue
(在add
+commit --amend
之后)将停止,因为说break
。正如DylanYoung在评论中所说:
它允许您在
exec
或merge
之后立即中断,这在以前是不可能的。注意:
edit
是在Git v1.5.3-rc0, June 2007, commit 1b1dce4中引入交互式变基的。但是
break
命令是最近才出现的:Git v2.20.0-rc0, Oct. 2018, commit 71f8246参见commit 71f8246(2018年10月12日)和commit b8c0b21(2018年10月10日),作者Johannes Schindelin (
dscho
)。(由Junio C Hamano --
gitster
--合并于commit 789b1f7,2018年11月2日)“
git rebase -i
“学习了新指令(“insn”)"break
“,用户可以将其插入到待办事项列表中。点击它后,命令将控制权返回给用户。
rebase -i
:引入“break
”命令'
edit
'命令可以用来挑选一个提交,然后立即退出交互式变基,退出代码为0,让用户修改提交,或者测试它,或者四处看看。有时候这个功能会派上用场 * 而不需要 * 挑选一个提交,例如。甚至在cherry-picking一个commit之前,或者在'
exec
'或'merge
'之后立即中断交互式变基。这次提交引入了这个功能,作为全新的'
break
'命令。看“给我给予一个休息”.你给了我一个
只是想表达我对您在
git rebase -i
的todo列表中引入break
命令的想法的感谢。我现在一直在用它。在此之前,我使用的是
x bash
,在很多情况下,我都是在那个shell中执行git rebase --continue
,当我终止那个shell时,结果并不好(只是一个错误消息,实际上没有什么结果)。这个特点是一种祝福。或者:
'
x bash
'将启动另一个shell,这似乎是一件奇怪的事情。我一直在使用'
x false
'来生成一个错误退出状态,以中断rebase并放入当前shell。然后'
git rebase --continue
'恢复。b
比x false
要短得多(而且我也不能在深夜将其键入为x flase
,尽管我猜这会产生停止交互式变基的相同效果)。uyto3xhc2#
我使用
break
的一件事是edit
不能做的,那就是应用fixup
,然后做其他事情,比如更新代码审查。例如,如果我有
我可以
然后
请注意,您可以使用
exec
来实现相同的目的,但我更喜欢通过将其放入命令行来获得控制权。pieyvz9o3#
在你提供的例子中,你是正确的。在
pick
之后使用break
与只使用edit
相同。这样使用break
是没有意义的。当break
跟随squash
、fixup
、merge
或exec
时,break
变得有用。这在the commit message that introduced the
break
command中有解释:rebase -i:引入“break”命令
edit
命令可以用来挑选一个提交,然后立即退出交互式变基,退出代码为0,让用户修改提交,或者测试它,或者四处看看。有时候这个功能会派上用场 * 而不需要 * 挑选一个提交,例如。甚至在cherry-picking提交之前,或者在
exec
或merge
之后立即中断交互式变基。这个提交引入了这个功能,作为全新的
break
命令。wvmv3b1j4#
简短的回答:
break
允许你做编辑所做的一切,但是在edit
之后超过10年才引入,所以edit
仍然存在。edit
有一个非常温和的优势,即在git rebase --continue
上隐含git commit --amend
。