15

ローカル ブランチとリモート ブランチの両方を同時に削除するエイリアスを作成しようとしていますが、構文が機能しない理由がわかりません。では~/.gitconfig、次のエイリアスを試しましたが、それぞれが同じ結果を生成しますが、これは予想外です。

[alias]
     nuke = !sh -c 'git branch -D $1 && git push origin :$1'

[alias]
     nuke = !git branch -D $1 && git push origin :$1

両方が生成します:

$> git branch
  * master
  mybranch
$> git nuke mybranch
Everything up-to-date
$> git branch
  * master
  mybranch

コマンドの順序を切り替えると、別の結果が生成されますが、探しているものとは完全には異なります。

[alias]
    nuke = !git push origin :$1 && git branch -D $1

...

$> git branch
  * master
  mybranch
$> git nuke mybranch
Everything up-to-date
Deleted branch mybranch (was d719895)
$> git branch
  * master
$> git push origin :mybranch
To git@github.com:biegel/repo.git
 - [deleted]         mybranch

そのコマンドをシェルで直接実行すると、うまく機能します。

$> git branch
* master
  mybranch
$> git branch -D mybranch && git push origin :mybranch
Deleted branch mybranch (was d719895
To git@github.com:biegel/repo.git
 - [deleted]         mybranch
$> git branch
* master

でエイリアスを作成し、シェル関数を使用して~/.bashrc使用しようとしましたが、何もかかりません!git push origin --delete $1!f() { };

私はあきらめる準備ができています。私がここで見逃しているものについて何か考えはありますか?

ありがとう。

4

3 に答える 3

39

これをうまく機能させることができます。定義の最後に不足している「-」を追加するだけです。$1「-」は、すべてのオプション処理が完了したことを bash に通知し、その後に続くものはすべて、、$2などを介して参照できるパラメーターになります。

[alias]
     nuke = !sh -c 'git branch -D $1 && git push origin :$1' -

コマンド ラインから別のブランチに切り替えてから、次のコマンドを実行します。

git nuke branch-name

あるいは….gitconfig何らかの理由で上記をファイルに追加できないが、、、などにアクセス.bashrcできる.bash_profile場合は、次を追加できます。

git config --global alias.nuke '!sh -c "git branch -D $1 && git push origin :$1" -'
于 2013-05-24T17:42:09.750 に答える
1

$1エイリアスでは使用できません。git-nukeパスのどこかに呼び出されるスクリプトを作成して、適切なシェル スクリプトにアクセスできるようにします。

git-extrasをインストールすることもできます。これは、スクリプトを含むスクリプト コンパイルであり、git delete-branchまさにあなたが望むことを行います。

于 2013-05-24T17:23:05.113 に答える