如何自动接受git rebase --interactive呈现给我的内容?

5

我正在使用一个小脚本来修复过去的提交。该脚本假定损坏提交的修复已经被暂存,工作目录是干净的,并且损坏的提交已经通过命令行传递。以下是脚本的原始Python核心:

#!/usr/bin/env python
import os
import sys

broken_commit = sys.argv[1]

logmsg = os.popen( "git log --format=%%s %s~1..%s" % ( broken_commit, broken_commit ), 'r' ).read().strip()
os.system( "git commit --message \"fixup! %s\"" % logmsg )
os.system( "git rebase --interactive --autosquash %s~2" % broken_commit )

现在,我看到了一个编辑器,并且只需要确认所显示的更改(在我的情况下是:wq),但我该如何避免这最后一步呢?我希望git rebase命令能够继续执行,而不给我编辑步骤的机会。

我听说可以通过设置EDITOR环境变量来实现特殊脚本。然而,我在Windows上使用msysGit,所以在这方面有些受限制。


我本来想说,“只需去掉--interactive选项”,但我读了autosquash的文档:“仅当使用--interactive选项时,此选项才有效。” 真遗憾。给一个好问题加一分! - Daniel Stutzbach
如果你想尝试的话,向git-rebase--interactive.sh添加一个--autoaccept选项可能非常简单。 - alternative
@mathepic: 可能是这样,但有三个开关--interactive--autosquash--autoaccept似乎是错误的——只有在前面指定了前导器时,它们才有意义。 - Frerich Raabe
2个回答

6

在运行 git rebase 之前,将环境变量 EDITOR 设置为 true 将使它自动接受所示的更改。


3
你可以使用 GIT_EDITOR 来避免意外破坏其他东西,尽管它应该在子shell中运行,所以话题无关。你也可以将其作为别名:rbas = '!export GIT_EDITOR=true; git rebase --interactive --autosquash' 或者在调用git rebase的同一次 system 调用中设置环境变量来处理你的Python脚本。 - Cascabel

0
如果您想在文件.gitconfig上创建别名:
rb = '!export GIT_EDITOR=true; git rebase --interactive --autosquash'

如果您想在您的文件 .bashrc.zshrc 上创建别名:
alias rb='export GIT_EDITOR=TRUE; git rebase --interactive --autosquash'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接