Ich möchte, dass meine lokalen und Remote-Repositorys in Bezug auf Zweige immer synchron sind.
Nach einer Pull Request-Überprüfung auf GitHub füge ich meinen Zweig dort zusammen und entferne ihn (remote). Wie kann ich diese Informationen in meinem lokalen Repository abrufen und Git veranlassen, auch meine lokale Version des Zweigs zu entfernen?
git ls-remote
undgit show-ref
.git symbolic-ref
undgit update-ref
.Antworten:
Der schnelle Weg
NB: Wenn Sie nicht eingeschaltet sind
master
, kann dies den Zweig löschen. Lesen Sie weiter für den "besseren Weg".Stellen Sie sicher, dass wir den Meister behalten
Sie können sicherstellen, dass
master
oder ein anderer Zweig in dieser Angelegenheit nicht entfernt wird, indemgrep
Sie nach mehr suchen. In diesem Fall würden Sie gehen:Also , wenn wir wollten , halten
master
,develop
undstaging
zum Beispiel, würden wir gehen:Machen Sie dies zu einem Alias
Da es etwas lang ist, möchten Sie möglicherweise einen Alias zu Ihrem
.zshrc
oder hinzufügen.bashrc
. Meins heißtgbpurge
(fürgit branches purge
):Laden Sie dann Ihr
.bashrc
oder neu.zshrc
:oder
quelle
branch
um ein Porzellan und nicht um einen Installationsbefehl handelt , sollten Sie in zukünftigen Versionen von Git auf Änderungen an der Benutzeroberfläche achten, die diese möglicherweise beschädigen.master
gelöscht wird.grep -Ev '(\*|master|important-branch)'
~/.gitconfig
stattdessen in Ihr hinzufügen möchten , fügen Sie dem[alias]
Abschnitt Folgendes hinzu :gbpurge = !"git branch --merged | grep -Ev '\\*|master|develop|staging' | xargs -n 1 git branch -d"
(keine Notwendigkeit, () im grep-Ausdruck zu verwenden).Ich verwende den gleichen Ablauf mit GitHub und fand die vorherigen Antworten nicht zufriedenstellend, da
git branch --merged
Listenzweige aufgelistet wurden, die zusammengeführt wurden, aber in meinem Fall wurden nicht alle entfernt entfernt. Das hat bei mir funktioniert:git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d
wo:
git fetch --all -p
: Aktualisieren Sie den Status der lokalen Niederlassungengit branch -vv
: Listet den Status der lokalen Niederlassungen aufgrep ": gone]"
: gelöschte filternawk '{ print $1 }'
: extrahieren ihre Namenxargs -n 1 git branch -d
: Übergeben Sie den Namen an den Befehl deleteHinweis: Wenn Sie möchten, können Sie -D anstelle von -d verwenden, wodurch das Löschen erzwungen wird.
Beispielsweise:
Referenz:
http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches
quelle
git checkout master; git pull origin master; git fetch --all -p; git branch -vv | grep gone | awk '{ print $1 }' | xargs -n 1 git branch -d
branch -vv
die letzte Festschreibungsnachricht aus dem Zweig angezeigt wird. Wenn Sie in dieser Nachricht zufällig "gegangen"grep gone
wären, würde dies auch diesen Zweig treffen. Istgrep ": gone]"
also wohl etwas sicherer zu bedienen.awk '$3 $4 ~ /:gone]$/ { print $1 }'
-D
stattdessen-d
die perfekte Antwort!Versuchen:
Dadurch wird Ihr lokaler Zweig gelöscht, wenn der entsprechende Remote-Zweig gelöscht wird.
Aktualisiert:
Die obige Aussage ist nicht so richtig.
In der Tat läuft
git pull --prune
wird die Remote-Tracking - Zweige nur ENTFERNT so wieAnschließend können Sie die
git branch -r
auf Ihrem Computer verbleibenden Zweigstellen für die Fernverfolgung überprüfen. Angenommen, die linken Zweige sind:was bedeutet, die Niederlassung
origin/fff
gelöscht wird.Also, nach dem Laufen
git pull --prune
einfach laufen:git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)
Sie können alle lokalen Niederlassungen herausfinden, die:
kann dann
<the command above> | xargs git branch -d
alle löschen.quelle
--prune
Flag löscht nur Fernverfolgungszweige, keine lokalen Zweige.git fetch --prune
, das ist meine Art der Wahlgit pull --prune
führte zu "Sie haben gefragt, ob Sie von der Fernbedienung '--prune' abrufen möchten, aber keinen Zweig angegeben. Da dies nicht die standardmäßig konfigurierte Fernbedienung für Ihren aktuellen Zweig ist, haben Sie muss einen Zweig in der Befehlszeile angeben. "Dies sollte funktionieren, um zu vermeiden, dass die Master- und Entwicklungszweige mit der akzeptierten Lösung gelöscht werden:
quelle
Für Benutzer von Powershell entspricht dies der obigen Antwort :
git branch -D
jeden der gefundenen Zweige anquelle
Nichts davon funktionierte für mich. Sie können meine andere Antwort hier sehen: https://stackoverflow.com/a/34969726/550454
Aber im Wesentlichen habe ich dies jetzt in meinem
~/.gitconfig
:quelle
Sehr einfache Lösung: Entfernen Sie Ihr lokales Repo und klonen Sie das Remote-Repo erneut. Mag nicht sehr elegant erscheinen, aber es ist einfach und Sie werden genau verstehen, was Sie tun, ohne Manpages zu lesen :-).
quelle
Ich mache das nur, um zusammengeführte lokale Zweige zu entfernen:
und falls Sie auch nicht vorhandene Trackings entfernen möchten:
quelle
Ich habe diesen Einzeiler geschrieben, um alle lokalen Zweige aufzulisten, die keinen entsprechenden entfernten Zweig haben:
Danach ist das Löschen dieser lokalen Zweige einfach mit
xargs
:quelle
master
auch auf, es funktioniert nicht wie erwartet; Seien Sie vorsichtigFür den Fall, dass Sie gerade Ihren Zweig zum Master verschoben und zusammengeführt haben, gehen Sie in git bash wie folgt vor:
Wenn Sie sich derzeit in diesem Zweig befinden, werden Sie zum Master zurückgeschoben. An diesem Punkt ziehen Sie mit
quelle
Die abgestimmte Antwort hat das Potenzial, den Master zu löschen. Betrachten Sie das folgende praktische Beispiel.
Ich hatte zwei Feature-Zweige hemen_README und hemen_BASEBOX, die zu Develop zusammengeführt wurden, und dann wurde Develop zu Master zusammengeführt. Die Feature-Zweige hemen_README und hemen_BASEBOX wurden remote gelöscht, wurden jedoch weiterhin lokal angezeigt. Auch ich bin nicht auf Master vor Ort, sondern auf Entwicklung.
In diesem Fall
Also, wenn ich den obigen Teilbefehl ausführe
Beachten Sie, dass auch der Master angezeigt wird, der schließlich gelöscht wird.
Auf jeden Fall konnte ich es schaffen. Ich teile Ihnen mein Sitzungsprotokoll mit, wie ich das erreicht habe.
Ich habe gerade überprüft, wie beschnitten werden soll, und habe es dann beschnitten. Mit Blick auf den Zweigbefehl unten haben wir uns um Fernbedienungen gekümmert
Löschen Sie nun die lokalen Zweige
Gut jetzt sind die Zweige wie gewünscht.
quelle