2013-05-24 13 views
12

ローカルブランチとリモートブランチの両方を同時に削除するエイリアスを作成しようとしていますが、シンタックスが動作しない理由を理解できません。 ~/.gitconfigでは、私は、次のエイリアスを試してみたが、それぞれは予想外で同じ結果、生成します。両方の農産物ローカルとリモートを削除するgitエイリアス

[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 [email protected]:biegel/repo.git 
- [deleted]   mybranch 

私はシェル上で直接そのコマンドを実行すると、それがうまく動作:

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

私はgit push origin --delete $1を使用して、~/.bashrcでエイリアスを作成しようとした!f() { };とシェルの機能を使用して、何も取っていないようにみえました!

私はあきらめます。私がここで紛失していることに関する考えは?

ありがとうございました。

答えて

24

これをうまく動作させることができます。定義の最後に欠落した ' - 'を追加するだけです。

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

別名に$1を使用することはできません。パスのどこかにgit-nukeという名前のスクリプトを作成し、適切なシェルスクリプトにアクセスできるようにします。

git-extrasをインストールすることもできます。それはgit delete-branchスクリプトを含むスクリプトコンパイルであり、あなたが望むものとまったく同じです。

+0

ああ、ポインタに感謝を。私はおそらくgit-extrasに行くでしょう。 – biegel

+4

[jszakmeisterの答え](http://stackoverflow.com/a/16740731/456814)を参照してください。エイリアスで** $ 1を使用できます。 –

+0

jszakmeisterの回答は実際には素晴らしい解決策ですが、エイリアスではまだ$ 1を使用できません。 'sh'はそこで' $ 1'の処理をしています。エイリアスへの引数は常にエイリアスに追加されます。 – Chronial

2

あなたがビンを作成した場合git-nukeと呼ばれ、それを置く: - 「」すべてのオプションの処理が行われていることをbashに合図し、後に来るものは、あなたが$1$2などを経由して参照することができるパラメータとなるだろう$PATHの任意のディレクトリに同じ効果が得られます。このアプローチの利点は、もう少し明瞭で頑強なコマンドを書く能力です。

例:私のbashプロファイルには、私は:export PATH="$HOME/.bin:$PATH"があります。

そして~/.bin/git-nukeで、私が持っている:

#!/bin/bash 
set -eu 

# 
# git nuke <branch-name> 
# 
# Delete a branch (irrespective of its merged status) and 
# remove from origin. 
# 

echo "Nuking $1 ..." 

if git show-branch "$1" > /dev/null 2>&1 
then 
    git branch -D "$1" 
else 
    echo "No local branch to delete" 
fi 

git remote prune origin 
if git show-branch "origin/$1" > /dev/null 2>&1 
then 
    echo "Deleting remote $1 ..." 
    git push origin ":$1" 
else 
    echo "No remote branch to delete" 
fi 
+1

これのもう一つの利点は、あなたがオートコンプリートを追加できることです。 –

関連する問題