gpt4 book ai didi

git - Squash 提交基于消息

转载 作者:太空狗 更新时间:2023-10-29 14:41:29 33 4
gpt4 key购买 nike

在我的本地开发环境中使用推送部署系统会生成大量提交,我不想将其推送到上游。

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

<<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 左右)。

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

有没有更快的方法来压缩自动提交,或者我是否坚持使用手动 rebase ?

最佳答案

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

它有用的方式是 git rebase -ipick 命令上打开的编辑器与所有其他编辑器分开设置Git 的设置。具体来说,Git 使用 sequence.editor$GIT_SEQUENCE_EDITOR(如果已设置则优先使用后者,否则优先使用前者)。它只是在充满 pick 命令的文件上运行它设置的任何命令。 (如果这些都没有设置,Git 会回退到通常的 $GIT_EDITOR/core.editor/built-in-default, probably-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 命令上的任何内容,它会运行您的脚本,该脚本会替换正确的脚本并关闭它。如果您为任何替换选择了“挤压”或“编辑”,那不是“序列编辑器”操作的一部分,因此它使用常规 Git 编辑器并仍然运行 vim 或其他任何东西。

为自己设置一个小别名或脚本来以这种方式运行 rebase ,一切就绪。

关于git - Squash 提交基于消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319254/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com