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
動作しません。
Gitのよくある質問のセクション「引数付きのGitエイリアス」 を考慮すると、シェルを介してgitを呼び出すことで実行できます。
[alias]
rb = "!sh -c \"git rebase -i HEAD~$1\" -"
まだテストしていませんが、引数を渡すことができれば、それがその方法です。
同様の解決策は、 シェル関数 を使用することです:
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
ブランチ以降のすべてのコミットのリベース
ブランチで新しくなったすべてのコミットをリベースするだけの場合、親ブランチからブランチしたときから、設定に次のエイリアスを含める方が簡単です:
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 を参照してください
@Droogansは comment で指摘されましたが、少なくともmacOSでは(Unixに似たOS、さらにはWindowsでも同じことが当てはまると思います)、そのまま使用できますエイリアスの引数を表すプレースホルダー値としての$1
。したがって、git rb 8
がgit rebase -i HEAD~8
になるようにエイリアスを設定するには:
rb = "!git rebase -i HEAD~$1"
エイリアスで複数回使用することもできます。たとえば、git f my-branch
をgit fetch Origin my-branch:my-branch
に変換するエイリアスが必要な場合は、次のようにします。
f = "!git fetch Origin $1:$1"
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