Git 基于消息的挤压提交

Git 基于消息的挤压提交,git,Git,在本地开发环境中使用push-to-deploy系统会产生大量提交,我不想将这些提交推到上游 我想要一种更快、更自动的方法,将自动生成的提交压缩到尚未生成的提交中。当我的日志看起来像: <<sha1>> (HEAD -> feature/in-development) Complete feature <<sha2>> AUTO_COMMIT <<sha3>> Add function foo() <<sh

在本地开发环境中使用push-to-deploy系统会产生大量提交,我不想将这些提交推到上游

我想要一种更快、更自动的方法,将自动生成的提交压缩到尚未生成的提交中。当我的日志看起来像:

<<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
COMMIT的数量是可变的(1-20左右)

我一直在通过手动重定基来实现这一点
git-rebase--autosquash
看起来几乎就是我想要的,但是我自动生成的提交消息不包含所需的


有没有更快的方法来挤压自动提交,或者我被手动重定基址卡住了

git rebase-i命令将打开编辑器来编辑各种
拾取
命令。好吧,你已经知道了,这没什么大不了的,但对你的问题也不是一个有用的答案,对吧?好吧,这就是诀窍:它实际上是有用的

它的有用之处在于,在
pick
命令上打开的
git-rebase-i
编辑器是与git的所有其他编辑器设置分开设置的。具体来说,Git使用
sequence.editor
$Git\u sequence\u editor
(如果设置了后者,则首选前者)。它只需在满是
pick
命令的文件上运行设置为的任何命令。(如果这两个都未设置,Git将返回到通常的
$Git_编辑器
/
core.EDITOR
/内置默认值,可能是-
vim
编辑器。)

因此,您可以用您喜欢的任何语言编写自己的脚本,并将其放入
GIT\u SEQUENCE\u编辑器
SEQUENCE.EDITOR

#! /usr/bin/env python
"""
python script to automate replacing `pick <<hash>> AUTO_COMMIT`
with `fixup ...`
"""
现在,你必须编写你的程序来实现这一点。它只需打开名为程序参数的文件,然后将
pick
替换为
fixup
squash
或您喜欢的任何内容(如果合适),然后将其写回文件并退出

然后,运行:

GIT_SEQUENCE_EDITOR=that_script git rebase -i ...
它不运行
vim
pick
命令上的任何编辑器,而是运行脚本,替换正确的脚本并关闭。如果您为任何替换选择了“挤压”或“编辑”,则这不是“序列编辑器”操作的一部分,因此它使用常规Git编辑器,并且仍然运行
vim
或其他任何操作


为自己制作一个小别名或脚本,以这种方式运行rebase,您就一切就绪了。

啊,太棒了!谢谢
#! /bin/sh
# shell script to automate replacing ...
GIT_SEQUENCE_EDITOR=that_script git rebase -i ...