76

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機能しません。

4

4 に答える 4

101

Git Faq セクション「Git Aliases with argument」を考慮すると、それを行うことができますが、シェルを介して git を呼び出すことによって:

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

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

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

[alias]
        rb = "!f() { git rebase -i HEAD~$1; }; f"
于 2011-08-10T03:54:25.537 に答える
5

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

親ブランチから分岐した時点以降、ブランチで新しいすべてのコミットをリベースしたいだけの場合は、構成に次のエイリアスを含めるだけで簡単になります。

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/444610を参照してください

于 2015-06-24T20:35:16.920 に答える