2010-08-23 35 views
3

我正在使用一个小脚本修复过去的提交。该脚本假定已停止提交的修复程序,工作目录是干净的,并且在命令行上传递了损坏的提交。下面是脚本的原始Python的核心:如何自动接受git rebase --interactive提供给我的内容?

#!/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,所以我在这方面有点有限。

+0

我要说的是,“只要放弃 - 交互式”,但是我阅读了autosquash的文档:“此选项仅在使用--interactive选项时有效。”游民。 +1一个很好的问题! – 2010-08-23 15:32:23

+0

如果你想尝试一下,那么可以非常简单地将--autoaccept选项添加到git-rebase--interactive.sh中。 – alternative 2010-08-23 17:09:18

+0

@mathepic:很可能,但有三个开关'--interactive',' - autosquash'和'--autoaccept'似乎是错误的 - 并且它们中的每一个只有在指定前任时才有意义。 – 2010-08-25 08:01:00

回答

4

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

+2

你可以使用'GIT_EDITOR'来避免意外地粘贴其他任何东西,尽管它应该在子shell中运行,所以没有什么意义。你也可以把它作为别名:'rbas ='!export GIT_EDITOR = true; git rebase --interactive --autosquash'或者在你的python脚本的情况下,只需在调用git rebase的'system'中设置环境变量即可。 – Cascabel 2010-08-23 16:07:03

+0

@Jefromi:使用'GIT_EDITOR'是个好主意。 – 2010-08-23 16:18:59

相关问题