Hier sind die Befehle, die ich vom Hauptzweig verwendet habe
git branch experiment
git checkout experiment
Dann habe ich einige Änderungen an meinen Dateien vorgenommen, die Änderungen festgeschrieben und den neuen Zweig an GitHub gesendet.
git commit . -m 'changed files'
git push -u origin experiment
Später beschloss ich, meinen Experimentierzweig mit dem Hauptzweig zusammenzuführen.
git checkout master
git merge experiment
Schließlich habe ich die Änderungen an GitHub übertragen.
git push -u origin master
Alles lief gut, bis ich versuchte, meinen Experimentzweig mit zu löschen
git branch -d experiment
Ich habe die Fehlermeldung erhalten, dass error: The branch 'experiment' is not fully merged.
ich ein bisschen neu in Git bin, und ich weiß nicht, wie viel mehr ich möglicherweise die beiden Zweige zusammenführen könnte. Was vermisse ich hier?
git
git-branch
Mellowsoon
quelle
quelle
git commit --amend
squash
: stackoverflow.com/q/41946475/109941Antworten:
Hinweis Der Wortlaut wurde aufgrund der Kommentare geändert. Danke @slekse
Das ist kein Fehler, es ist eine Warnung. Dies bedeutet, dass der Zweig, den Sie löschen möchten, Commits enthält, die von keinem der folgenden Bereiche erreichbar sind: dem Upstream-Zweig oder HEAD (derzeit ausgecheckte Revision). Mit anderen Worten, wenn Sie Commits verlieren könnten¹.
In der Praxis bedeutet dies, dass Sie Commits wahrscheinlich geändert, neu basiert oder gefiltert haben und sie nicht identisch zu sein scheinen .
Daher können Sie die Warnung vermeiden, indem Sie einen Zweig auschecken , der die Commits enthält, die Sie nicht referenzieren möchten, indem Sie diesen anderen Zweig löschen.²
Sie sollten sicherstellen, dass Sie tatsächlich keine wichtigen Commits verpassen:
Dadurch erhalten Sie eine Liste aller zwischen den Zweigen nicht freigegebenen Elemente. Wenn Sie neugierig sind, gibt es möglicherweise einen Unterschied ohne
--cherry-pick
und dieser Unterschied könnte der Grund für die Warnung sein, die Sie erhalten:¹ Sie sind standardmäßig nur Müll, der nach einer Weile gesammelt wird. Außerdem
git-branch
überprüft der Befehl nicht den Revisionsbaum aller Zweige . Die Warnung soll offensichtliche Fehler vermeiden.² (Ich bevorzuge es, stattdessen nur das Löschen zu erzwingen, aber Sie möchten möglicherweise die zusätzliche Sicherheit haben).
quelle
Wie Drew Taylor betonte, berücksichtigt das Löschen von Zweigen mit -d nur den aktuellen HEAD, um festzustellen, ob der Zweig "vollständig zusammengeführt" ist. Es wird sich beschweren , auch wenn der Zweig ist mit einem anderen Zweig verschmolzen. Die Fehlermeldung könnte in dieser Hinsicht definitiv klarer sein ... Sie können entweder den zusammengeführten Zweig vor dem Löschen auschecken oder einfach den Git-Zweig -D verwenden. Das Großbuchstaben -D überschreibt den Scheck vollständig.
quelle
origin/master
?) Ich denke, das Auscheckenorigin/master
zuerst ist nicht zu lästig, aber es fühlt sich einfach wie ein seltsamer Ablauf an - warum muss ichorigin/master
lokal auschecken Nur damit Sie überprüfen können, ob meine Änderungen dort zusammengeführt werden?Ich habe die Antwort von sehe ausprobiert und es hat nicht funktioniert.
Um die Commits zu finden, die nicht zusammengeführt wurden, verwenden Sie einfach:
quelle
Das ist mir heute passiert, als ich meinen ersten Feature-Zweig wieder in Master zusammenführte. Wie einige in einem Thread an anderer Stelle auf SO sagten, bestand der Trick darin, wieder zum Master zu wechseln, bevor versucht wurde, den Zweig zu löschen. Als Git wieder im Master war, war es glücklich, den Zweig ohne Warnungen zu löschen.
quelle
Git warnt Sie, dass Sie möglicherweise den Verlauf verlieren, wenn Sie diesen Zweig löschen. Auch wenn keine Commits sofort gelöscht werden, sind einige oder alle Commits in der Verzweigung nicht mehr erreichbar, wenn sie nicht auch Teil einer anderen Verzweigung sind.
Damit der Zweig
experiment
vollständig mit einem anderen Zweig zusammengeführt werden kann, muss sein Tip-Commit ein Vorfahr des Tip des anderen Zweigs sein, sodass die Commits inexperiment
einer Teilmenge des anderen Zweigs ausgeführt werden. Dies macht das Löschen sicherexperiment
, da alle Commits über den anderen Zweig Teil des Repository-Verlaufs bleiben. Es muss "vollständig" zusammengeführt werden, da es möglicherweise bereits mehrmals zusammengeführt wurde, aber jetzt seit der letzten Zusammenführung Commits hinzugefügt wurden, die nicht in der anderen Verzweigung enthalten sind.Git überprüft jedoch nicht jeden anderen Zweig im Repository. nur zwei:
Die "Upstream-Niederlassung" für
experiment
, wie in Ihrem Fall, ist wahrscheinlichorigin/experiment
. Wennexperiment
der aktuelle Zweig vollständig zusammengeführt ist, löscht Git ihn ohne Beanstandung. Wenn dies nicht der Fall ist, es jedoch vollständig in seinem Upstream-Zweig zusammengeführt ist, fährt Git mit einer Warnung fort, die wie folgt aussieht:Wobei
xxxxxxxx
eine Commit-ID angibt. Eine vollständige Zusammenführung im Upstream zeigt an, dass die Commits inexperiment
das Ursprungs-Repository verschoben wurden, sodass sie, selbst wenn Sie sie hier verlieren, zumindest an anderer Stelle gespeichert werden können.Da Git andere Zweige nicht überprüft, kann es sicher sein, einen Zweig zu löschen, da Sie wissen, dass er vollständig mit einem anderen zusammengeführt ist. Sie können dies mit der angegebenen
-D
Option tun oder zuerst zu diesem Zweig wechseln und Git den vollständig zusammengeführten Status für Sie bestätigen lassen.quelle
Um Änderungen zu sehen, die nicht zusammengeführt werden, habe ich Folgendes getan:
Hinweis: Dies zeigt Änderungen an
master
, die nicht in sindexperiment
.Vergiss nicht:
Wenn du fertig bist, schau.
quelle
man git-reset
und die Befehle zum Zurücksetzen von Git ausreichen, um sich von Statusproblemen zu erholen.Einfachste Lösung mit Erklärung (doppelt überprüfte Lösung) (das Problem war zuvor aufgetreten)
Das Problem ist:
1- Ich kann keinen Zweig löschen
2- Das Terminal zeigt weiterhin eine Warnmeldung an, dass einige Commits noch nicht genehmigt wurden
3- wissend, dass ich den Master und den Zweig überprüft habe und sie identisch sind (aktuell)
Lösung:
Erläuterung:
Wenn Ihr Zweig mit einem vorgelagerten Remote-Zweig verbunden ist (auf Github, Bitbucket oder was auch immer), müssen Sie ihn in den Master einbinden (pushen) und die neuen Änderungen (Commits) in das Remote-Repo (Github, Bitbucket oder was auch immer) aus der Filiale,
Was ich in meinem Code getan habe, ist, dass ich zum Master gewechselt bin, dann den Zweig darin zusammengeführt habe (um sicherzustellen, dass sie auf Ihrem lokalen Computer identisch sind), dann habe ich wieder zum Zweig gewechselt und die Aktualisierungen oder Änderungen online in die Fernbedienung übertragen Repo mit "Git Push".
Danach wechselte ich wieder zum Master und versuchte, den Zweig zu löschen. Das Problem (Warnmeldung) verschwand und der Zweig wurde erfolgreich gelöscht
quelle
Sie können einfach herausfinden:
--cherry
Option ist ein Synonym für--right-only --cherry-mark --no-merges
git-log manpage sagte
Zu Ihrer Information.
--cherry-pick
lässt gleichwertige Commits aus,--cherry-marks
tut dies aber nicht. Es ist nützlich, Rebase zu finden und aktualisierte Änderungen zwischen vorgelagerten und kooperierenden öffentlichen Zweigen zu erzwingenquelle
Ich hatte keinen Upstream-Zweig auf meinem lokalen Git. Ich hatte eine lokale Niederlassung von Master, Git Checkout -b Mybranch erstellt. Ich habe einen Zweig mit Bitbucket-GUI auf dem Upstream-Git erstellt und meinen lokalen Zweig (mybranch) auf diesen Upstream-Zweig verschoben. Sobald ich einen Git-Abruf für meinen lokalen Git durchgeführt habe, um den Upstream-Zweig abzurufen, konnte ich einen Git-Zweig -d Mybranch erstellen.
quelle
Ich glaube, die Flagge
--force
ist das, wonach Sie wirklich suchen. Verwenden Sie einfachgit branch -d --force <branch_name>
, um den Zweig zwangsweise zu löschen.quelle