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()
在“真实”提交之间存在可变数量(1-20 左右)的AUTO_COMMIT
提交。
我一直在通过手动变基来做到这一点。git rebase --autosquash
看起来这几乎是我想要的,但我自动生成的提交消息不包含所需的...
.
有没有更快的方法来压缩自动提交,还是我坚持手动变基?
解决方案
该git rebase -i
命令会打开您的编辑器来编辑各种pick
命令。好的,您已经知道这一点,这没什么大不了的,但也不是对您的问题有用的答案,对吧?好吧,这就是诀窍:它实际上很有用。
有用的方式是,在命令上git rebase -i
打开的编辑器与 Git 的所有其他编辑器设置分开设置。具体来说,Git 使用or (如果设置了则首选后者,否则首选前者)。它只是在充满命令的文件上运行设置为的任何命令。(如果这两个都没有设置,Git 会退回到通常的//内置默认的,可能是 -编辑器。)pick
sequence.editor
$GIT_SEQUENCE_EDITOR
pick
$GIT_EDITOR
core.editor
vim
因此,您可以使用您喜欢的任何语言编写自己的脚本,并将其放入GIT_SEQUENCE_EDITOR
or 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
orsquash
或您想要的任何内容替换,然后将其写回文件并退出。
然后,运行:
GIT_SEQUENCE_EDITOR=that_script git rebase -i ...
而不是运行vim
或您的编辑器在pick
命令上的任何内容,它运行您的脚本,替换正确的脚本并关闭它。如果您为任何替换选择了“squash”或“edit”,那不是“sequence editor”操作的一部分,因此它使用常规的 Git 编辑器并且仍然运行vim
或其他。
为自己创建一个小别名或脚本,以这种方式运行 rebase,一切就绪。
推荐阅读
- python - 如何连接 1d 和 0d numpy 数组的混合列表?
- javascript - React 的 IE 11 问题
- python - 为什么在加载时序列化的 numpy random_state 对象不同?
- assembly - IDA pro 不显示像 ollyDBG 这样的汇编代码
- ios - 某些 iPad 设备返回此代码不提供的生物识别信息,为什么?
- jenkins - Jenkins:获取在管道内触发的作业的内部版本号
- ios - Cordova iOS 应用程序 AJAX POST 到 SSL 失败
- java - 如何使对话框窗口按钮被点击后做某事?
- python - 如何在不重启容器的情况下在 Docker 中重启 Python Swagger 服务器
- java - 转换为原始类型