基于提交信息压缩提交记录

3
在我的本地开发环境中使用推送部署系统会产生许多提交,我不想将它们推送到上游。我希望有一种更快、更自动化的方法来合并已自动生成的提交和未生成的提交。当我的日志看起来像这样时:
<<sha1>> (HEAD -> feature/in-development) Complete feature
<<sha2>> AUTO_COMMIT
<<sha3>> Add function foo()
<<sha4>> AUTO_COMMIT
<<sha5>> AUTO_COMMIT
<<sha6>> Remove function bar()

我希望能够压缩每个带有 AUTO_COMMIT 消息的提交记录,以达到以下效果:

<<sha-1>> (HEAD -> feature/in-development) Complete feature
<<sha-2>> Add function foo()
<<sha-3>> Remove function bar()

在“真实”提交之间有不同数量(大约1-20个)的AUTO_COMMIT提交。

我一直通过手动变基来完成这个过程。git rebase --autosquash 看起来几乎是我想要的,但我的自动生成的提交消息不包含所需的...

有没有更快的方式来压缩自动提交,或者我只能使用手动变基?

1个回答

3
git rebase -i命令会打开编辑器,让你编辑各种pick命令。这个你已经知道了,但是这并不是你想要的有用的答案,对吧?好吧,这就是诀窍:它实际上是有用的。
它的用处在于,git rebase -i打开的编辑器与Git的所有其他编辑器设置是独立的。具体而言,Git使用sequence.editor$GIT_SEQUENCE_EDITOR(如果设置了后者,则优先使用后者)。它只是在充满pick命令的文件上运行该命令所设置的任何命令。(如果没有设置以上两个变量,则Git将回退到通常的$GIT_EDITOR / core.editor / 内置默认编辑器,可能是vim编辑器)。
因此,您可以编写自己的脚本,使用您喜欢的任何语言,并将其放入GIT_SEQUENCE_EDITORsequence.editor中:
#! /usr/bin/env python
"""
python script to automate replacing `pick <<hash>> AUTO_COMMIT`
with `fixup ...`
"""

或者:

#! /bin/sh
# shell script to automate replacing ...

现在,你需要编写程序来实现这一点。它只需要打开以程序参数命名的文件,将pick替换为fixupsquash或其他适当的内容,并将其写回文件后退出即可。

然后运行:

GIT_SEQUENCE_EDITOR=that_script git rebase -i ...

而不是在“pick”命令上运行vim或其他编辑器,它会运行您的脚本,替换正确的命令,然后继续执行。如果您选择了“squash”或“edit”来进行任何更改,则不是“序列编辑器”操作的一部分,因此将使用常规Git编辑器,并且仍然运行vim或其他编辑器。
请为自己创建一个小别名或脚本以这种方式运行rebase,然后您就准备好了。

哇,太棒了!谢谢! - simont

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