Git交互式变基:停止但不提交

5

(TLDR) 在git rebase -i中是否有一种方式可以停止编辑,而无需提交ID? (/TLDR)

较长版:

背景

使用git rebase -i时,我会得到一个文本编辑器,在其中可以定义一系列命令,每行以pick COMMIT_ID开头。

其中之一的选项是将“pick COMMIT_ID”替换为“edit COMMIT_ID”,这意味着它将在提交后停止,以便我可以修改提交或进行一些手动操作。然后我可以继续使用git rebase --continue

从选项列表中:

#  e, edit = use commit, but stop for amending

问题

我想知道是否有一种选项可以停止编辑,而不选择任何提交。

动机 / 用例

例如,如果我想压缩一系列提交,并在一些手动操作之后停止,我必须在同一个提交ID前面放置edit + squash - 这是不允许的。

相反,我会像这样做:

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在以下行中丢失或不是提交。有趣的是,效果差不多就是我想要的,它会停止,然后我可以进行操作。但我确定这不是预期的方法。
2个回答

7
您有一个、两个或三个选项,具体取决于某些情况。
第一个选项:
插入。
exec false

它的简写形式
x false

在你想要停止的地方。正如你所知,exec在命令出现的地方运行shell命令;但是如果命令失败退出,git rebase就会停止,而命令false总是失败退出。

第二个选项

如果你使用的是Git 2.20或更高版本,你可以插入

break

"或其简称"
b

在你想要停止的那个点上。这个命令就是为了你所询问的目的而引入的。
第三种选择:
将你想要停止的点之前的提交使用 edit 而不是 pick 标记。显然,如果你想在第一个提交之前或在 squashfixup 提交之后停止,这种方法就不起作用。

2
另外,将最后一个 squash 更改为 edit,并使用 git reset --soft @^; git commit --amend 自行进行 squash。 - jthill
我认为“休息”现在显然是最简单和最好的选择,所以它应该排在首位。 - undefined

0

我不确定是否可能。在压缩后,您必须进行第二次交互式变基,然后修改提交。


好的,我会等待看看是否有更好的解决方法被提出。 - donquixote

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接