git alias, um lokal und remote zu löschen

Lesezeit: 4 Minuten

Ich versuche, einen Alias ​​zu schreiben, um sowohl einen lokalen als auch einen Remote-Zweig gleichzeitig zu löschen, aber ich kann nicht herausfinden, warum die Syntax nicht funktioniert. In ~/.gitconfigich habe die folgenden Aliase ausprobiert, aber jeder führt zu demselben Ergebnis, was unerwartet ist:

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

und

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

beide produzieren:

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

Das Ändern der Reihenfolge der Befehle führt zu einem anderen Ergebnis, ist aber auch nicht ganz das, wonach ich suche:

[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

Wenn ich diesen Befehl direkt auf der Shell ausführe, funktioniert es gut:

$> 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

Ich habe versucht, einen Alias ​​in zu erstellen ~/.bashrcverwenden git push origin --delete $1 und mit einer Shell-Funktion mit !f() { }; und nichts scheint zu nehmen!

Ich bin bereit aufzugeben. Irgendwelche Gedanken darüber, was ich hier vermisse?

Vielen Dank.

Benutzeravatar von John Szakmeister
John Szakmeister

Sie können diese Arbeit gut machen. Sie müssen nur ein fehlendes ‘-‘ am Ende Ihrer Definition hinzufügen. Das ‘-‘ signalisiert bash, dass die gesamte Optionsverarbeitung abgeschlossen ist, und alles, was danach kommt, wird zu einem Parameter, über den Sie referenzieren können $1, $2etc:

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

Wechseln Sie von der Befehlszeile zu einem anderen Zweig und führen Sie dann den Befehl aus:

git nuke branch-name

Alternativ… Wenn Sie das Obige nicht zu Ihrem hinzufügen können .gitconfig Datei aus irgendeinem Grund, aber Zugriff auf die .bashrc, .bash_profileetc… können Sie Folgendes hinzufügen:

git config --global alias.nuke '!sh -c "git branch -D $1 && git push origin :$1" -'

Dougs Benutzeravatar
Doug

Wenn Sie eine Bin namens erstellen git-nuke und platzieren Sie es in einem beliebigen Verzeichnis auf Ihrer $PATH, erzielen Sie den gleichen Effekt. Der Vorteil bei diesem Ansatz ist die Möglichkeit, einen Befehl etwas klarer und robuster zu schreiben.

Beispiel, in meinem Bash-Profil habe ich: export PATH="$HOME/.bin:$PATH".

Und in ~/.bin/git-nukeIch habe:

#!/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

  • Ein weiterer Vorteil davon ist, dass Sie die automatische Vervollständigung hinzufügen können.

    – Oliver Joseph Ash

    20. Juli 2016 um 14:42 Uhr

  • Kann ich git dazu bringen, dies als neuen Unterbefehl zu vervollständigen? nuke als ob es als Alias ​​​​definiert wäre oder muss ich es eingeben git-nuke? in der Schale?

    – Nordlöw

    20. August 2020 um 19:13 Uhr

  • Die git-mycmd Trick bedeutet, dass Sie jetzt a mycmd Unterbefehl und wird über aufgerufen git mycmd und die Tab-Vervollständigung funktioniert mit using git my[tab]

    – Doug

    3. März 2021 um 16:22 Uhr

Sie können nicht verwenden $1 unter einem Pseudonym. Erstellen Sie ein Skript namens git-nuke irgendwo in Ihrem Pfad, damit Sie Zugriff auf das richtige Shell-Scripting haben.

Du könntest auch einfach installieren Git-Extras. Das ist eine Skriptkompilierung, die die enthält git delete-branch Skript, das genau das tut, was Sie wollen.

  • Ah, danke für den Hinweis. Ich werde wahrscheinlich mit Git-Extras gehen.

    – Biegel

    24. Mai 2013 um 17:28 Uhr

  • Bitte sehen Sie sich die Antwort von jszakmeister an kann verwenden $1 unter einem Pseudonym.

    Benutzer456814

    25. Mai 2013 um 5:37 Uhr

  • Während die Antwort von jszakmeister in der Tat eine nette Lösung ist, können Sie sie immer noch nicht verwenden $1 unter einem Pseudonym. sh tut das $1 Handhabung dort. Die Argumente zu einem Alias ​​werden immer daran angehängt.

    – Chronisch

    25. Mai 2013 um 10:20 Uhr

1439420cookie-checkgit alias, um lokal und remote zu löschen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy