2016-12-26 21 views
1

目前我做擊:如何撰寫功能,其中內部函數會返回一個參數

git log --author="AlanH" --invert-grep -n1 --format=%H 

得到提交最後的哈希承諾,這是不是我。然後我用它來做git rebase -i <commit_hash>,其中commit_hash必須從上一個命令的輸出中手動複製和粘貼。

在bash,我想這樣做

squash() { 
    git rebase -i (git log --author="AlanH" --invert-grep -n1 --format=%H) 
} 

,使得內部命令首先完成,然後供稿到rebase命令。 我該怎麼做?

回答

4

答案的殼特定部分是其他人所說的:$(cmd)運行cmd並在其輸出中拼接。

這樣就會使最終結果方面沒有差別,但對於編寫腳本的目的,應該經常使用git rev-list而不是git log(因爲git rev-list是專門設計來用於腳本,而git log主要是指供人) 。使用rev-list的主要區別是,你可以刪除指令,則針對腳本的格式,rev-list已經打印散列和默認情況下必須添加的起點HEADgit log用品:

git rebase -i $(git rev-list --author="AlanH" --invert-grep -n1 HEAD) 

(有沒有真正的強者理由更喜歡git rev-list在這裏,雖然由此產生的命令是少了幾個字符。)

+0

謝謝你建議'rev-list'(這是適當的)。 –

+0

你也可以使用:'git rev-list --author =「AlanH」--invert-grep -n1 HEAD | xargs git rebase -i' – hIpPy

+0

@hIpPy:是的,雖然'xargs'具有不同的預期用途,這對於'git rebase'來說並不合適。 (看起來像你打字'-n2'並將其固定爲'-n1') – torek

2

更換

git rebase -i (git log --author="AlanH" --invert-grep -n1 --format=%H) 

通過

git rebase -i $(git log --author="AlanH" --invert-grep -n1 --format=%H) 

參見:3.5.4 Command Substitution

1

括號前放置一個$

git rebase -i $(git log --author="AlanH" --invert-grep -n1 --format=%H) 

這將評估其中的所有內容(這將是提交ID),然後將其傳遞給rebase命令。

相關問題