壁球基于消息提交

时间:2019-01-23 02:36:09

标签: git

在本地开发环境中使用即按即用系统会产生很多提交,但我不想将其提交到上游。

我想要一种将自动生成的提交压缩为没有自动提交的更快,更自动的方法。当我的日志如下所示:

<<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()

在“实际”提交之间,AUTO_COMMIT提交的数量是可变的(大约1-20)。

我一直在通过手动重新设置基准进行此操作。 git rebase --autosquash看起来几乎是我想要的,但是我自动生成的提交消息不包含必需的...

是否有一种更快的方法来压制自动提交,还是我坚持手动重新设置?

1 个答案:

答案 0 :(得分:3)

git rebase -i命令调出您的编辑器以编辑各种pick命令。好的,您已经知道了这一点,没什么大不了的,但是对您的问题也不是一个有用的 answer ,对吗?嗯,这就是窍门: 实际上有用。

有用的方式是,将git rebase -ipick命令上打开的编辑器与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 ...

,它将运行您的脚本,而不是运行vim或您的编辑器在pick命令中执行的操作,它将替换正确的脚本并自动执行。如果您选择“ squash”或“ edit”进行任何替换,则这不是“ sequence editor”操作的一部分,因此它将使用常规的Git编辑器并仍运行vim或其他任何方式。

给自己起一个别名或脚本以这种方式运行变基,一切都准备就绪。