Wie lösche ich einen Git-Zweig lokal und remote?
-
18-09-2019 - |
Frage
Ich möchte einen Zweig sowohl lokal als auch remote löschen.
Fehlgeschlagene Versuche, den Remote-Zweig zu löschen
$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.
$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.
$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).
$ git push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.
Was sollte ich anders machen, um das erfolgreich zu löschen?remotes/origin/bugfix
sowohl lokal als auch remote verzweigen?
Lösung
Zusammenfassung
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
Beachten Sie, dass der Remote-Name in den meisten Fällen lautet origin
.
Lokale Zweigstelle löschen
Um die zu löschen lokal branch verwenden Sie eine der folgenden Optionen:
$ git branch -d branch_name
$ git branch -D branch_name
Notiz: Der -d
Option ist ein Alias für --delete
, wodurch der Zweig nur gelöscht wird, wenn er bereits vollständig in seinem Upstream-Zweig zusammengeführt wurde.Sie könnten auch verwenden -D
, was ein Alias für ist --delete --force
, der den Zweig "unabhängig von seinem zusammengeführten Status" löscht. [Quelle: man git-branch
]
Remote-Zweig löschen [Aktualisiert am 8. September 2017]
Ab Git v1.7.0, können Sie a löschen Fernbedienung Zweig mit
$ git push <remote_name> --delete <branch_name>
was vielleicht leichter zu merken ist als
$ git push <remote_name> :<branch_name>
was hinzugefügt wurde Git v1.5.0 „um einen Remote-Zweig oder ein Tag zu löschen.“
Beginnt am Git v2.8.0 Sie können auch verwenden git push
mit dem -d
Option als Alias für --delete
.
Daher bestimmt die von Ihnen installierte Git-Version, ob Sie die einfachere oder schwierigere Syntax verwenden müssen.
Remote Branch löschen [Ursprüngliche Antwort vom 5. Januar 2010]
Aus Kapitel 3 von Pro Git von Scott Chacon:
Remote-Zweige löschen
Angenommen, Sie sind mit einem Remote-Zweig fertig – sagen wir, Sie und Ihre Mitarbeiter sind mit einer Funktion fertig und haben sie in den Master-Zweig Ihres Remote-Zweigs (oder in den Zweig, in dem sich Ihre stabile Codezeile befindet) eingefügt.Sie können einen Remote-Zweig mithilfe der eher unübersichtlichen Syntax löschen
git push [remotename] :[branch]
.Wenn Sie Ihren Server-Fix-Zweig vom Server löschen möchten, führen Sie Folgendes aus:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
Boom.Kein Zweig mehr auf Ihrem Server.Möglicherweise möchten Sie diese Seite ignorieren, da Sie diesen Befehl benötigen und wahrscheinlich die Syntax vergessen.Eine Möglichkeit, sich diesen Befehl zu merken, besteht darin, sich daran zu erinnern
git push [remotename] [localbranch]:[remotebranch]
Syntax, die wir etwas früher besprochen haben.Wenn Sie das weglassen[localbranch]
Teil, dann sagst du im Grunde: „Nimm nichts auf meiner Seite und lass es geschehen.“[remotebranch]
.”
Ich habe ausgestellt git push origin :bugfix
und es hat wunderbar funktioniert.Scott Chacon hatte Recht – ich werde es wollen Eselsohr diese Seite (oder praktisch Eselsohr, indem Sie dies auf Stack Overflow beantworten).
Dann sollten Sie dies auf anderen Maschinen ausführen
git fetch --all --prune
um Änderungen zu propagieren.
Andere Tipps
Matthew Antwort ist für das Entfernen Remote Niederlassungen und ich schätze auch die Erklärung, aber eine einfache Unterscheidung zwischen den beiden Befehlen zu machen:
So entfernen Sie eine lokale Niederlassung von Ihrem Computer:
git branch -d {the_local_branch}
(Verwendung -D
anstatt zu zwingen, den Zweig zu löschen, ohne fusionierte Statusprüfung)
So entfernen Sie ein Remote-Zweig vom Server:
git push origin --delete {the_remote_branch}
Referenz: https://makandracards.com/ Makandra / 621-git-löschen-a-Zweig-local-oder-Fern
Die Kurz Antworten
Wenn Sie nähere Erläuterungen der folgenden Befehle wollen, dann sieht die langen Antworten im nächsten Abschnitt.
Löschen einen Remote-Zweig:
git push origin --delete <branch> # Git version 1.7.0 or newer
git push origin :<branch> # Git versions older than 1.7.0
Löschen eine lokale Niederlassung:
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
Löschen eines lokalen Remote-Tracking-Zweig:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
Die lange Antwort: Es gibt 3 verschiedene Zweige löschen
!Wenn Sie es zu tun mit Niederlassungen Löschen sowohl lokal als auch remote, bedenken Sie, dass gibt es 3 verschiedene Zweige beteiligt :
- Die lokale Niederlassung
X
. - Die Fern Ursprung Zweig
X
. - Die lokale Remote-Tracking-Zweig
origin/X
, die die Remote-ZweigX
aufspürt.
Das ursprüngliche Plakat verwendet
git branch -rd origin/bugfix
, die nur gelöscht sein lokale Fernverfolgung Zweig origin/bugfix
, und nicht die tatsächliche Fern Zweig bugfix
auf origin
.
So löschen Sie, dass die tatsächlichen Fern Zweig , müssen Sie
git push origin --delete bugfix
Weitere Details
Die folgenden Abschnitte beschreiben zusätzliche Details zu beachten, wenn die Fernbedienung und Fern Tracking-Zweig zu löschen.
Pushing Fern Zweige löschen löscht auch Remote-Tracking-Zweig
Beachten Sie, dass die Remote-Zweig X
von der Befehlszeile Löschen eines git push
mit wird auch die lokale Fernverfolgung Zweig löschen origin/X
, so ist es nicht erforderlich, die veraltete Fernverfolgung Zweig mit git fetch --prune
beschneidet oder git fetch -p
, obwohl würde es nicht schaden, wenn Sie es trotzdem getan hat.
Sie können überprüfen, ob die Remote-Tracking-Zweig origin/X
auch durch Ausführen der gelöscht wurde folgende:
# View just remote-tracking branches
git branch --remotes
git branch -r
# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a
Bereinigen der veraltete lokale Fernverfolgung Zweig Herkunft / X
Wenn Sie nicht das Remote-Zweig X
von der Befehlszeile löschen (wie oben), dann Ihre lokale Repo noch enthalten (eine jetzt veraltet) Fernverfolgung Zweig origin/X
. Dies kann passieren, wenn Sie einen Remote-Zweig direkt über GitHub der Web-Oberfläche gelöscht, zum Beispiel.
Ein typischer Weg, um diese veralteten Fernverfolgung Zweige (seit Git Version 1.6.6) zu entfernen ist einfach git fetch
mit dem --prune
oder kürzer -p
laufen. Beachten Sie, dass diese alle veralteten lokalen Fernverfolgung entfernt Zweige für alle Remote-Niederlassungen, die nicht mehr existieren auf der Fernbedienung :
git fetch origin --prune
git fetch origin -p # Shorter
Hier ist das relevante Zitat aus dem 1.6.6 Release notes (Hervorhebung von mir):
"git holen" gelernt
--all
und--multiple
options, laufen zu holen aus viele Repositories und--prune
Option Remote-Tracking zu entfernen Zweige, die abgestanden ging. Diese machen "git remote update" und „git Fern Prune „weniger notwendig (es gibt keinen Plan zu entfernen“ remote aktualisieren“noch "remote Prune", obwohl).
Alternative zu oben den automatischen Bereinigung für veraltete Fernverfolgung Zweige
Alternativ kann anstelle des veralteten lokalen Fernverfolgung Zweige durch git fetch -p
Beschneiden, können Sie machen die zusätzlichen Netzwerkbetrieb vermeiden nur durch den Zweig manuell zu entfernen (n) mit den --remote
oder -r
Fahnen:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Siehe auch
Schritte zum Löschen eine Branche aus:
Für den Remote-Zweig zu löschen:
git push origin --delete <your_branch>
Für die lokale Niederlassung Löschen , haben Sie drei Möglichkeiten: :
1: git branch -D <branch_name>
2: git branch --delete --force <branch_name> //same as -D
3: git branch --delete <branch_name> //error on unmerge
Erklären Sie: OK, nur erklären, was hier los ist
Einfach tun git push origin --delete
auf löschen Fernbedienung Zweig ONLY , fügen Sie den Namen der Branche am Ende, und dies wird löschen und drücken Sie auf Remote zur gleichen Zeit. ..
Auch git branch -D
, die einfach den lokalen Zweig löschen ONLY ! ...
-D
steht für --delete --force
, die den Zweig löscht auch ist es nicht verschmolzen (Kraft löschen), aber Sie können auch -d
benutzen, die für --delete
steht, die einen Fehler jeweils der Branche merge Status werfen ...
Ich schaffe auch die Bild unter , um die Schritte zeigen:
Sie können auch die folgenden löschen Sie die Remote-Zweig
verwendengit push --delete origin serverfix
Welche macht das Gleiche wie
git push origin :serverfix
, aber es kann einfacher sein, sich zu erinnern.
Tipp: Wenn Sie löschen Zweige mit
git branch -d <branchname> # deletes local branch
oder
git push origin :<branchname> # deletes remote branch
werden nur die Verweise gelöscht. Auch wenn die Verzweigung tatsächlich die Verweise auf der Fernbedienung entfernt wird, um es existiert noch in dem lokalen Repositories Ihrer Teammitglieder. Dies bedeutet, dass für die anderen Teammitglieder die gelöschten Zweige sind noch sichtbar, wenn sie eine git branch -a
tun.
Um dies Ihre Teammitglieder lösen können mit
die gelöschten Äste beschneidengit remote prune <repository>
Dies ist typischerweise git remote prune origin
.
Wenn Sie einen Zweig löschen, erste Kasse mit dem Zweig anderes als der Zweig gelöscht werden.
git checkout other_than_branch_to_be_deleted
Löschen der lokalen Niederlassung:
git branch -D branch_to_be_deleted
Löschen des Fern Zweig:
git push origin --delete branch_to_be_deleted
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Das ist ganz einfach: Einfach den folgenden Befehl ausführen:
Um eine Git-Zweigs zu löschen sowohl lokal als auch remote, löschen Sie zuerst den lokalen Zweig Befehl:
git branch -d example
(hier example
ist der Zweig Name)
Und danach löscht Remote-Zweig mit dem Befehl:
git push origin :example
Ein weiterer Ansatz ist: -
git push --prune origin
. ACHTUNG: Dadurch werden alle Remote-Zweige löschen, die nicht lokal vorhanden Oder umfassender,
git push --mirror
wird effektiv die Remote-Repository wie die lokale Kopie des Repository aussieht (lokale Köpfe, Fernbedienungen und Tags werden auf Remote-Mirroring).
Ich verwende die folgenden in meinem Bash Einstellungen:
alias git-shoot="git push origin --delete"
Dann können Sie anrufen:
git-shoot branchname
Seit Januar 2013 enthalten GitHub a Löschen Zweig neben jedem Zweig in Ihrem "Branches" Seite.
Relevante Blog-Eintrag: Erstellen und Löschen von Zweigen
Löschen lokal:
eine lokale Niederlassung löschen, können Sie:
git branch -d <branch_name>
einen Zweig mit Gewalt zu löschen, verwendet -D
statt -d
.
git branch -D <branch_name>
Löschen der Ferne:
Es gibt zwei Möglichkeiten:
git push origin :branchname
git push origin --delete branchname
Ich würde vorschlagen, dass Sie die 2. Art und Weise verwenden, wie es intuitiver ist.
Wenn Sie beide Schritte mit einem einzigen Befehl ausführen möchten, können Sie einen Alias dafür erstellen, indem Sie Folgendes zu Ihrem hinzufügen ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"
Alternativ können Sie dies über die Befehlszeile mit zu Ihrer globalen Konfiguration hinzufügen
git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'
NOTIZ:Bei Verwendung -d
(Kleinbuchstabe d), der Zweig wird nur gelöscht, wenn er zusammengeführt wurde.Um den Löschvorgang zu erzwingen, müssen Sie verwenden -D
(Großbuchstabe D).
So löschen Sie Ihre Branche lokal als auch remote
-
Zur Kasse zu Master-Zweig -
git checkout master
-
Löschen Sie Ihre Remote-Zweig -
git push origin --delete <branch-name>
-
Löschen Sie Ihre lokale Niederlassung -
git branch --delete <branch-name>
Sie können auch dieses mit git remote prune origin
tun
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
Es Pflaumen und löscht Fernverfolgung Zweig von einem git branch -r
Auflistung.
Zusätzlich zu den anderen Antworten, verwende ich oft das git_remote_branch Tool. Es ist eine extra installieren, aber es wird Ihnen eine bequeme Möglichkeit, mit Remote-Niederlassungen zu interagieren. In diesem Fall zu löschen:
grb delete branch
Ich finde, dass ich auch die publish
und track
Befehle ziemlich oft
Ein Liner Befehl löscht sowohl lokale und Remote-:
D=branch-name; git branch -D $D; git push origin :$D
oder den Aliasnamen hinzufügen unten an deine ~ / .gitconfig ; Nutzung: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"$1\"; git push origin --delete \"$1\"; };f"
Lassen Sie uns unsere Arbeit auf dem Zweig „Kontakt-Formular“ annehmen getan und wir haben bereits integriert es in „Master“. Da wir es nicht mehr brauchen, können wir sie löschen (lokal):
$ git branch -d contact-form
Für den Remote-Zweig zu löschen:
git push origin --delete contact-form
Remote-Zweig löschen
git push origin :<branchname>
Filiale Löschen
git branch -D <branchname>
lokale Zweig Schritte löschen:
- Kasse zu einem anderen Zweig
- löschen lokale Niederlassung
Sie einfach sagen:
git branch -d <branch-name>
git push origin :<branch-name>
git push origin --delete <branch Name>
ist leichter zu merken als
git push origin :branchName
Jetzt können Sie es mit der GitHub Desktop- App tun.
Nach dem Start der App
- für das Projekt Klicken Sie auf den Zweig enthalten
- Wechseln Sie in die Filiale Sie möchten
- Von der „Filiale“ Wählen Sie im Menü „Unpublish ...“, den Zweig von den GitHub Servern gelöscht haben.
- Von der „Filiale“ Wählen Sie im Menü ‚Löschen‚ branch_name ‘...‘, die abzweigen von Ihrem lokalen Rechner gelöscht haben (auch bekannt als die Maschine, die Sie gerade arbeiten) < a href = "https://i.stack.imgur.com/TTuLO.png">
So löschen Sie Lokal - (Normal),
git branch -d my_branch
Wenn Sie Ihre Niederlassung in Rebasieren / Fusionierung Fortschritt und das nicht richtig bedeutet getan wurde, erhalten Sie einen Fehler Rebase/Merge in progress
erhalten so in diesem Fall werden Sie nicht in der Lage, Ihre Filiale zu löschen.
Also entweder Ihre Notwendigkeit Rebasieren zu lösen / Fusionierung sonst können Sie tun, Kraft löschen, indem Sie,
git branch -D my_branch
Um im Remote zu löschen:
git push --delete origin my_branch
kann das gleiche tun mit,
git push origin :my_branch # easy to remember both will do the same.
Grafische Darstellung,
Das wird nicht funktionieren, wenn Sie einen Tag mit dem gleichen Namen wie der Zweig auf der Fernbedienung haben:
$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'
In diesem Fall müssen Sie angeben, dass Sie den Zweig löschen möchten, nicht mit dem Tag:
git push origin :refs/heads/branch-or-tag-name
Und den Tag anstelle der Branche zu löschen, die Sie verwenden würden:
git push origin :refs/tags/branch-or-tag-name
Viele der anderen Antworten werden auf Fehler / Warnungen führen. Dieser Ansatz ist relativ narrensicher, obwohl Sie noch git branch -D branch_to_delete
müssen wenn es nicht vollständig in some_other_branch
verschmolzen, zum Beispiel.
git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete
Remote Beschneidung ist nicht erforderlich, wenn Sie den Remote-Zweig gelöscht. Es ist nur die aktuellsten Fernbedienungen auf einem Repository Sie Tracking erhalten verwendet. Ich habe beobachtet, git fetch
wird Fernbedienungen hinzufügen, so dass sie nicht entfernen. Hier ist ein Beispiel dafür, wann git remote prune origin
tatsächlich etwas tun:
Benutzer A hat die oben genannten Schritte. Benutzer B würde die folgenden Befehle ausführen, um die meisten zu sehen, auf den neuesten Stand entfernte Niederlassungen
git fetch
git remote prune origin
git branch -r
ich krank für diese Antwort googeln, so habe ich einen ähnlichen Ansatz href="https://stackoverflow.com/a/15775364/551436"> die Antwort auf früher geschrieben.
addierte folgend mein Bash Profil:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Dann (verschmolzen in master
, zum Beispiel) jedes Mal, wenn ich mit einem Zweig fertig bin ich laufe die folgend in meinem Terminal:
gitdelete my-branch-name
... die dann my-branch-name
von origin
löscht als auch lokal.
Vor der Ausführung
git branch --delete <branch>
stellen Sie sicher, Sie bestimmen zuerst, was der genaue Name des Remote-Zweig ist durch Ausführen:
git ls-remote
Dies wird Ihnen sagen, was genau für <branch>
Wert einzugeben. (branch
Groß- und Kleinschreibung!)
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Wenn Sie sicher, dass Sie es zu löschen, führen
git branch -D bugfix
Jetzt gelöscht entfernten Niederlassungen zu bereinigen, führen
git remote prune origin
Mashup aller anderen Antworten. Benötigt Ruby 1.9.3+
, getestet nur auf OS X.
Rufen Sie diese Datei git-remove
, machen es ausführbar, und legen Sie sie in Ihrem Weg. Dann nutzen Sie zum Beispiel git remove temp
.
#!/usr/bin/env ruby
require 'io/console'
if __FILE__ == $0
branch_name = ARGV[0] if (ARGV[0])
print "Press Y to force delete local and remote branch #{branch_name}..."
response = STDIN.getch
if ['Y', 'y', 'yes'].include?(response)
puts "\nContinuing."
`git branch -D #{branch_name}`
`git branch -D -r origin/#{branch_name}`
`git push origin --delete #{branch_name}`
else
puts "\nQuitting."
end
end