git 交互式变基:停止而不提交
git interactive rebase: stop without commit
(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
问题
我想知道是否有一个选项可以停止编辑,而不选择任何提交。
动机/用例
例如如果我想压缩一系列提交,然后停止进行一些手动操作,我将不得不将 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 会这样说:
Warning: the SHA-1 is missing or isn't a commit in the following line:
有趣的是,效果差不多是我想要的,它停止了,我可以做事了。但我确信这不是预期的方式。
我不知道这是否可能。压缩后,您必须进行第二次交互式变基,然后修改提交。
您有一个、两个或三个选项,具体取决于某些情况。
第一个选项
插入
exec false
或其简称
x false
在你想停下来的地方。你可能知道,exec
在命令出现的地方运行shell命令;但是如果命令失败退出,git rebase
停止,命令 false
总是失败退出。
第二个选项
如果您使用的是 Git 2.20 或更高版本,您可以插入
break
或其简称
b
在你想停下来的地方。引入此命令正是为了满足您的要求。
第三个选项
用 edit
而不是 pick
标记要停止的点之前的提交。显然,如果您想在第一次提交之前或 squash
或 fixup
提交之后停止,这将不起作用。
(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
问题
我想知道是否有一个选项可以停止编辑,而不选择任何提交。
动机/用例
例如如果我想压缩一系列提交,然后停止进行一些手动操作,我将不得不将 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 会这样说:
Warning: the SHA-1 is missing or isn't a commit in the following line:
有趣的是,效果差不多是我想要的,它停止了,我可以做事了。但我确信这不是预期的方式。
我不知道这是否可能。压缩后,您必须进行第二次交互式变基,然后修改提交。
您有一个、两个或三个选项,具体取决于某些情况。
第一个选项
插入
exec false
或其简称
x false
在你想停下来的地方。你可能知道,exec
在命令出现的地方运行shell命令;但是如果命令失败退出,git rebase
停止,命令 false
总是失败退出。
第二个选项
如果您使用的是 Git 2.20 或更高版本,您可以插入
break
或其简称
b
在你想停下来的地方。引入此命令正是为了满足您的要求。
第三个选项
用 edit
而不是 pick
标记要停止的点之前的提交。显然,如果您想在第一次提交之前或 squash
或 fixup
提交之后停止,这将不起作用。