Git 交互式变基壁球提交 - 任何快捷方式

问题描述

我经常使用 git rebase -i HEAD~5 来重新设置提交并将它们压缩为一个。我的问题是,是否有一种速记方法可以做到这一点,但要选择/重命名第一个提交,然后压缩所有其他提交?例如,如果我有 5 个提交,例如每次提交手动执行此操作,但是当我说 40 个提交时,我不想在其中的 39 个旁边放置 squashs一开始。

同样,一旦我选择了选择/重命名/压缩的提交,当您进入下一个屏幕要求您选择要包含的提交消息时,是否有更短的方法告诉它注释掉所有提交除了第一条消息?

解决方法

压缩提交的最快方法是 git reset --soft :

git reset --soft HEAD~5
# or
git reset --soft a12345
git commit

如果您想将其与 rebase -i 重写相结合:您可以在您的音序器脚本中使用 break

pick a12345 first commit
pick b23456 2nd commit
pick c34567 3rd commit
...
pick f67890 6th commit

break   # 'break' will temporarily stop the rebase
        # you can type whatever commands you want,# (e.g : 'git reset --soft xxx' and 'git commit')
        # followed by 'git rebase --continue'

您也可以使用 exec,但如果您正在重写,请注意提交引用(c34567HEAD~3)音序器脚本到达那个点:

pick a12345 first commit
pick b23456 2nd commit
pick c34567 3rd commit
...
pick f67890 6th commit

exec git reset --soft HEAD~3  # caution : if some actions already squash or split
                              # commit 4 for example,'HEAD~3' won't have the
                              # same meaning as what you see now.
,

如果您在变基时配置了默认的 vim 编辑器,则可以使用可视模式并替换行。当我执行 git rebase -i 时,我看到:

pick c536072 something
pick cf5b2ca something
pick c092c25 something
pick c1b19af something
pick 0261bb1 something
pick 38d9cd4 something

通常您输入 i 以进入插入模式并输入内容。但相反,键入 j(向下一行)和 V 3 j 这将选择(视觉上)4 行,然后键入 : ({{ 1}} 将在下面单独显示),然后输入 :'<,'> 并按 Enter,这会将 s/pick/s 替换为 pick 以代表所有选定的行。之后用 sZZ 退出 vim。

:wq<CR> 是一个非常强大的工具,它有大量在线文档可供您研究 - 您可以为工作创建自己的函数。您还可以work non-interactively on git rebase创建自己的 shell 命令。

无论如何,我的 git 配置中有:

vim

这样我就不会进行许多几乎为空的提交并推送它们,而是先进行提交,然后修改对该提交的所有更改,以便首先不存在几乎为空的提交(我在测试时这样做gitlab-ci 配置很多).

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...