web-dev-qa-db-ja.com

Gitエイリアスコマンドに引数を渡す

Gitコマンドのエイリアスに引数を渡すことはできますか?

Git configには、次のようなエイリアスがあります。

rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....

rbエイリアスを作成して、git rb <x><x>

私はこのエイリアスを試しました:

rb = rebase -i HEAD~

しかし、その後_git rb 8 動作しません。

66
HaveF

Gitのよくある質問のセクション「引数付きのGitエイリアス」 を考慮すると、シェルを介してgitを呼び出すことで実行できます。

[alias]
        rb = "!sh -c \"git rebase -i HEAD~$1\" -"

まだテストしていませんが、引数を渡すことができれば、それがその方法です。

同様の解決策は、 シェル関数 を使用することです:

[alias]
        rb = "!f() { git rebase -i HEAD~$1; }; f"
92
VonC

ブランチ以降のすべてのコミットのリベース

ブランチで新しくなったすべてのコミットをリベースするだけの場合、親ブランチからブランチしたときから、設定に次のエイリアスを含める方が簡単です:

rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -

次に、現在のブランチに追加したすべてのコミットをリベースする場合は、次を実行します。

git rbi parentBranch

このアプローチは引数を使用しますが、戻るコミットの数を知る必要はなく、ブランチ名を指定するだけで、git merge-baseを介して現在のブランチと親ブランチ間で共有された最新のコミットがわかります。

なぜgit rebase -i parentBranchではなく

単純なgit rebase -i parentBranchではなくこれを行う理由は、後の時点までマージ競合を処理したり、1回のコミットでマージ競合を処理したり、その後同じ競合を処理したくない場合があるためです。別のコミットの同じ行で。 https://stackoverflow.com/a/31036645/44461 を参照してください

4
Seth Flowers

@Droogansは comment で指摘されましたが、少なくともmacOSでは(Unixに似たOS、さらにはWindowsでも同じことが当てはまると思います)、そのまま使用できますエイリアスの引数を表すプレースホルダー値としての$1。したがって、git rb 8git rebase -i HEAD~8になるようにエイリアスを設定するには:

    rb = "!git rebase -i HEAD~$1"

エイリアスで複数回使用することもできます。たとえば、git f my-branchgit fetch Origin my-branch:my-branchに変換するエイリアスが必要な場合は、次のようにします。

    f = "!git fetch Origin $1:$1"
1
Andrew Patton

MacでGitのインタラクティブなリベースを行うためにこの関数「grb」を書いたので、grb 5最後の5つのコミットを表示するには:

function grb {
  git rebase -i HEAD~$1
}

このページの一番上の回答は、私にとってはうまくいきません。私の.bash_profileおよびMacで使用する他のすべてのGitエイリアス:

https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L146

0
Raymond Gan