2016-12-26 9 views
1

を返しますの機能を構成する方法現在、私は バッシュ:内部関数は、引数

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

をやっていると、それは私ではなかった最後のコミットのハッシュをコミット取得します。次に私は git rebase -i <commit_hash>を実行します。ここで commit_hashは手作業でコピーして、前のコマンドの出力から貼り付けなければなりません。

私は内部コマンドが rebaseコマンドにそれを供給し、その後、最初に完了するように、この

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

ような何かをしたいと思いbashで

。 どうすればいいですか?

答えて

4

答えのシェル特有の部分は、他の人が言ったことです:$(cmd)は、cmdとその出力でスプライスを実行します。

git rev-listが具体的にスクリプトから使用するように設計されているためgit logは、ほとんどの人間が使用するために意味される一方で、)これは最終結果の面で違いはありませんでしょうが、スクリプトの目的のために、1は通常git logではなくgit rev-listを使用する必要があります。 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コマンドに渡します。