2010-08-23 67 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

相關問題