215

複数の Git コマンドと位置パラメーターの両方を使用するエイリアスを作成しようとしています。それぞれに Stackoverflow ページがあり、両方を行うのは痛々しいほど明らかですが、私は問題を抱えています。

例として、ブランチ foo に切り替えてステータスを実行したいとします。だから私の中に.gitconfig、私は持っています:

  [alias] 
     chs = !sh -c 'git checkout $0 && git status'

これは機能しません。一方、このようなものは機能します。

chs = !sh -c 'git checkout $0'

echoes = !sh -c 'echo hi && echo bye'

任意の洞察をいただければ幸いです。

4

10 に答える 10

177

これは機能します(zshとbashでテスト済み):

[alias] chs = !git checkout $1 && git status
于 2011-09-23T20:11:16.913 に答える
111

これは、Windows バッチ/msysgit bash を対象としています。他の環境では動作しない場合があります。

オリヴィエ・ヴェルディエとリリー・バラードが言ったように

[alias] chs = !git checkout $1 && git status

ほとんど機能しますが、引数の誤った余分な挿入が行われます...

git chs demo -> git checkout demo && git status demo

しかし&& :、エイリアスの末尾に追加すると、偽の引数がロケーション タグに取り込まれます。

そう

[alias] chs = !git checkout $1 && git status && :

正しい出力が得られます... git chs demo -> git checkout demo && git status

于 2014-09-18T14:19:04.773 に答える
84

シェル関数を定義できます。

[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"
于 2011-09-23T20:14:14.590 に答える
30

複数行の非常に複雑な git エイリアスを作成することができました。それらは Windows でも問題なく動作しますが、他の場所でも動作すると思います。たとえば、次のようになります。

safereset = "!f() { \
                trap 'echo ERROR: Operation failed; return' ERR; \
                echo Making sure there are no changes...; \
                last_status=$(git status --porcelain);\
                if [[ $last_status != \"\" ]]; then\
                    echo There are dirty files:;\
                    echo \"$last_status\";\
                    echo;\
                    echo -n \"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: \";\
                    read dirty_operation;\
                    if [ \"$dirty_operation\" == \"Y\" ]; then \
                        echo Resetting...;\
                        git reset --hard;\
                    elif [ \"$dirty_operation\" == \"W\" ]; then\
                        echo Comitting WIP...;\
                        git commit -a --message='WIP' > /dev/null && echo WIP Comitted;\
                    else\
                        echo Operation cancelled;\
                        exit 1;\
                    fi;\
                fi;\
            }; \
            f"

私は投稿を書きましたが、ここにいくつかの例があります。

于 2015-02-13T14:56:06.520 に答える
26
[alias]
chs = !git branch && git status
于 2012-10-29T16:20:55.090 に答える
6

\各行の末尾に追加することで、複数行の git エイリアスを使用できます。

[alias] 
   chs = "!git checkout $1 \ 
          ; git status     \
         "
于 2014-03-25T16:40:09.020 に答える