在本地开发环境中使用即按即用系统会产生很多提交,但我不想将其提交到上游。
我想要一种将自动生成的提交压缩为没有自动提交的更快,更自动的方法。当我的日志如下所示:
<<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
看起来几乎是我想要的,但是我自动生成的提交消息不包含必需的...
。
是否有一种更快的方法来压制自动提交,还是我坚持手动重新设置?
答案 0 :(得分:3)
git rebase -i
命令调出您的编辑器以编辑各种pick
命令。好的,您已经知道了这一点,没什么大不了的,但是对您的问题也不是一个有用的 answer ,对吗?嗯,这就是窍门: 实际上有用。
有用的方式是,将git rebase -i
在pick
命令上打开的编辑器与Git的所有其他编辑器设置分开 设置。具体来说,Git使用sequence.editor
或$GIT_SEQUENCE_EDITOR
(如果设置了后者,则优先使用后者,否则,则选择前者)。它只是在充满pick
命令的文件上运行此命令所设置的任何命令。 (如果两个都没有设置,则Git会退回到通常的$GIT_EDITOR
/ core.editor
/内置默认值,可能是vim
编辑器。)
因此,您可以使用自己喜欢的任何语言编写自己的脚本,并将其放在GIT_SEQUENCE_EDITOR
或sequence.editor
中:
#! /usr/bin/env python
"""
python script to automate replacing `pick <<hash>> AUTO_COMMIT`
with `fixup ...`
"""
或:
#! /bin/sh
# shell script to automate replacing ...
现在,您要做必须编写程序来执行此操作。只需打开名称为程序参数的文件即可,但是将pick
替换为fixup
或squash
或任何您需要的内容,然后将其写回到文件并退出。
然后运行:
GIT_SEQUENCE_EDITOR=that_script git rebase -i ...
,它将运行您的脚本,而不是运行vim
或您的编辑器在pick
命令中执行的操作,它将替换正确的脚本并自动执行。如果您选择“ squash”或“ edit”进行任何替换,则这不是“ sequence editor”操作的一部分,因此它将使用常规的Git编辑器并仍运行vim
或其他任何方式。
给自己起一个别名或脚本以这种方式运行变基,一切都准备就绪。