(TLDR)
git rebase -i
中有没有一种方法可以停止编辑而没有提交ID?
(/ TLDR)
长版:
有了git rebase -i
,我得到了一个文本编辑器,可以在其中定义命令列表,每行以pick COMMIT_ID
开头。
选项之一是用“ edit COMMIT_ID”替换“ pick COMMIT_ID”,这意味着它将在提交后停止,以便我修改提交或执行一些手动操作。然后,我可以继续进行git rebase --continue
。
从选项列表中:
# e, edit = use commit, but stop for amending
我想知道是否有一个选项可以停止编辑而不选择任何提交。
例如如果我要压缩一定范围的提交,然后在执行某些手动操作后停止,则必须将edit + squash放在同一提交ID之前-不允许。
相反,我会做这样的事情:
pick COMMIT_0 Change some colors
pick COMMIT_1 Make it faster
squash COMMIT_2 Fix a typo in previous commit
squash COMMIT_3 Fix another typo in previous commit
edit
pick COMMIT_4 Refactor some things
pick COMMIT_5 Introduce new options
这种选项还允许在序列中的第一次提交之前停止。
(我想说的是它允许在整个历史记录的首次提交之前进行编辑,但这是不正确的-最初的提交永远不会成为重新设置序列的一部分)
如果我这样做,git会这样说:
警告:以下行缺少SHA-1或不是该提交:
有趣的是,效果或多或少是我想要的,它停止了并且我可以做事。但是我敢肯定,这不是预期的方法。
答案 0 :(得分:4)
根据某些情况,您有一个,两个或三个选项。
插入
exec false
或其缩写
x false
在您要停止的位置。如您所知,exec
在执行命令的位置运行shell命令;但是如果命令失败退出,则git rebase
停止,并且命令false
总是失败退出。
如果您使用的是Git 2.20或更高版本,则可以插入
break
或其缩写
b
在您要停止的位置。引入此命令是出于您所要的目的。
用edit
而不是pick
标记要停止的位置之前的提交。显然,如果您想在第一次提交之前或在squash
或fixup
提交之后停止,则此方法不起作用。
答案 1 :(得分:1)
我不知道这是否可行。压扁之后,您必须进行第二次交互式变基,然后修改提交。