So beheben Sie den Fehler "Nicht etwas, das wir zusammenführen können"

291

Ich habe gerade ein Problem beim Zusammenführen eines Zweigs mit Master in Git festgestellt. Zuerst habe ich den Filialnamen durch Ausführen erhalten git ls-remote. Nennen wir diesen Zweig "Filialname". Ich habe dann den git merge branch-nameBefehl ausgeführt und das folgende Ergebnis erhalten:

fatal: branch-name - not something we can merge

Wie behebe ich diesen Fehler?

Brian
quelle

Antworten:

356

Wie in Wie entsteht "nicht etwas, das wir zusammenführen können"? Dieser Fehler kann durch einen Tippfehler im Zweignamen verursacht werden, da Sie versuchen, einen nicht vorhandenen Zweig abzurufen.

Wenn dies nicht das Problem ist (wie in meinem Fall), haben Sie wahrscheinlich keine lokale Kopie des Zweigs, den Sie zusammenführen möchten. Git erfordert lokale Kenntnisse beider Zweige, um diese Zweige zusammenzuführen. Sie können dieses Problem beheben, indem Sie den zu verschmelzenden Zweig auschecken und dann zu dem Zweig zurückkehren, in den Sie zusammenführen möchten.

git checkout branch-name
git checkout master
git merge branch-name

Dies sollte funktionieren, aber wenn Sie eine Fehlermeldung erhalten

error: pathspec 'remote-name/branch-name' did not match any file(s) known to git.

Sie müssen die Fernbedienung abrufen (wahrscheinlich, aber nicht unbedingt "Ursprung"), bevor Sie den Zweig auschecken:

git fetch remote-name
Brian
quelle
3
Dies geschah mir nach dem Hinzufügen einer neuen Fernbedienung - ich musste eine git fetcherste machen, bevor ich die Fernbedienung zusammenführte.
Jason
Abrufen und Auschecken des Zweigs von der Fernbedienung. Git holen && Git Checkout BranchName
Juni Brosas
2
Dies passierte mir, als ich in das falsche Projekt aufgenommen wurde (dh es war ein anderes Repo, das nicht einmal den Zweig hatte, den ich zusammenführen wollte)
JoelFan
1
Wenn Sie versuchen, einen Fork über die Befehlszeile ( help.github.com/articles/syncing-a-fork ) zu synchronisieren, liegt dieser Fehler wahrscheinlich daran, dass Sie Schritt 0 verpasst haben. Was? Es ist kein Schritt 0 aufgeführt? Ja, deshalb ist es leicht zu übersehen. "Bevor Sie Ihren Fork mit einem Upstream-Repository synchronisieren können, müssen Sie eine Fernbedienung konfigurieren, die auf das Upstream-Repository in Git verweist." <- das ist Schritt 0. Wenn Sie diesen Schritt überspringen, erhalten Sie den obigen Fehler, den Sie wahrscheinlich in Google eingegeben haben und der Sie hierher führt. :-)
Steve Bonds
1
Git requires local knowledge of both branches in order to merge those branches
Gangadhar JANNU
96

Es ist ein dummer Vorschlag, aber stellen Sie sicher, dass der Filialname keinen Tippfehler enthält!

endlos
quelle
4
nicht so albern, da "Tippfehler" sich auf die Tatsache reduzieren könnte, dass der Zweig noch nicht abgerufen wurde (und damit lokal unbekannt ist). Git macht die Dinge anders als CVS oder SVN.
klang
2
Das Problem kann auch verursacht werden, wenn der Zweigname Zeichen wie Kommas (,) oder Apostrophe (') enthält.
AxeEffect
Stellen Sie außerdem sicher, dass Sie sich im richtigen Repo- oder Terminalfenster / -register befinden, insbesondere wenn Sie an mehreren Repos gleichzeitig arbeiten.
Totymedli
71

Beim Ziehen von einer Fernbedienung stromaufwärts git fetch --allhabe ich den Trick gemacht:

git remote add upstream [url to the original repo]
git checkout [branch to be updated]
git fetch --all
git merge upstream/[branch to be updated]

In anderen Fällen stellte ich fest, dass der Fehler "Nicht etwas, das wir zusammenführen können" auch dann auftritt, wenn der Remote-Zweig (Ursprung, Upstream) nicht vorhanden ist. Dies mag offensichtlich erscheinen, aber Sie könnten sich git merge origin/developauf einem Repo befinden, das nur hat master.

Eneko Alonso
quelle
5
Ich weiß im Ernst nicht, warum diese Antwort nicht so viele Stimmen wie die oben genannte erhalten hat. 'git fetch -all' ist der Befehl, den man normalerweise nicht ausführt, bevor ein Remote-Zweig zusammengeführt wird, und der das Problem für mich gelöst hat.
Dayanand Gowda
2
Weil das Abrufen nicht automatisch erfolgt und Sie dies manuell tun müssen. Ein Paar holt - alle & zieht - alle macht den Trick.
Danielpopa
Danke dir! Das git remote add upstreamwar das Wichtige, was mir fehlte, das es für mich gelöst hat. Ich denke, ein häufiger Fehler ist die Annahme, dass eine Gabel automatisch weiß, woher sie gegabelt wurde.
Brent
23

Ich hatte auch dieses Problem. Der Zweig sah aus wie 'Benutzername / Master', was Git zu verwirren schien, da er wie eine von mir definierte Remote-Adresse aussah. Für mich damit

git merge origin/username/master

hat einwandfrei funktioniert.

spekulatius
quelle
4
Ich musste auch origin/den Namen der Gegenstelle angeben.
AsGoodAsItGets
Sie müssen dies tun, wenn der Name des Zweigs einen Schrägstrich enthält /.
CTS_AE
21

Die folgende Methode funktioniert jedes Mal für mich.

git checkout master
git pull
git checkout branch-name-to-be-merged
git pull
git checkout branch-name
git pull
git merge branch-name-to-be-merged
RNV
quelle
Das hat bei mir funktioniert, danke. I Dies ist im Wesentlichen die richtige Lösung:
Stellen
11

Dies kann passieren, weil sich dieser Zweig nicht in Ihrer Nähe befindet. vor dem Zusammenführen verwenden

git fetch origin
Alok Kamboj
quelle
7

Sie erhalten diesen Fehler, weil der Zweig, den Sie zusammenführen möchten, in Ihrem lokalen Repository nicht vorhanden ist.

Überprüfen Sie also zuerst den Brach, den Sie in den Hauptzweig einbinden möchten, mit dem folgenden Befehl:

git checkout branch_name_to_merge

Versuchen Sie danach, es mit dem folgenden Befehl mit dem Hauptzweig zusammenzuführen:

git merge branch_name_to_merge
Bilal Ahmed Yaseen
quelle
2
Dies kann auch passieren, wenn Sie nicht auf den Namen Ihrer Niederlassung achten (dh falsch geschrieben) :)
Matt Borja
Das hat bei mir funktioniert. Wenn ich in Atom mit der Registerkarte Git arbeite und die Zweige mit dem Dropdown- checkout
Menü wechsle
7

Dieser Fehler deutet darauf hin, dass der Zweig, von dem aus Sie Änderungen zusammenführen möchten (dh in Ihrem Fall der Name des Zweigs), in Ihrem lokalen Zweig nicht vorhanden ist. Sie sollten daher den Zweig auschecken und die lokalen Änderungen abrufen. Kasse zu Ihrem Hauptzweig und holen, dann folgen Sie den folgenden Schritten:

git checkout branch-name
git pull
git checkout new-branch-name
git merge branch-name
Amar Magar
quelle
Ich werde wählerisch sein und sagen, ich glaube nicht, dass die Fehlermeldung etwas wie das oben Gesagte nahelegt :-)
Brian Agnew
6

Diese Antwort bezieht sich nicht auf die obige Frage, aber ich hatte ein ähnliches Problem, und vielleicht ist dies für jemanden nützlich. Ich habe meinen Feature-Zweig wie folgt zum Master zusammengeführt:

$ git merge fix-load

Ich habe die folgende Fehlermeldung erhalten:

Merge: Fix-Load - nichts, was wir zusammenführen können

Ich habe vor allem nach Lösungen gesucht, aber keine hat funktioniert.

Ich habe festgestellt, dass das Problem ein Rechtschreibfehler in meinem Zweigstellennamen war (tatsächlich lautet der Name des zusammengeführten Zweigs fix-loads).

Yala Ramesh
quelle
4
Für mich hat das Hinzufügen von Herkunft funktioniert. Nehmen Sie Ihr Beispiel, hat git merge origin/fix-loadsfunktioniert.
Ram Patra
3

Ich habe diesen Fehler erhalten, als ich eine git merge BRANCH_NAME "some commit message"- ich hatte vergessen, das Flag -m für die Festschreibungsnachricht hinzuzufügen, daher dachte ich, dass der Filialname den Kommentar enthielt.

rein logisch
quelle
3

Meiner Meinung nach hatte ich es versäumt, meine lokale Niederlassung mit Remote Repo abzubilden. Ich habe unten und es hat gut funktioniert.

git checkout master
git remote add origin https://github.com/yourrepo/project.git
git push -u origin master
git pull
git merge myBranch1FromMain
Vinay Sharma
quelle
2

Wenn die Zeichenfolge, die die Referenz enthält, von einem anderen Git-Befehl (oder einem anderen Shell-Befehl) erzeugt wird, stellen Sie sicher, dass sie am Ende keinen Rückgabewagen enthält. Sie müssen es entfernen, bevor Sie die Zeichenfolge an "git merge" übergeben.

Beachten Sie, dass dies ziemlich offensichtlich ist, da die Fehlermeldung in zwei Zeilen angezeigt wird:

merge: 26d8e04b29925ea5b59cb50501ab5a14dd35f0f9
 - not something we can merge
Okroquette
quelle
3
Bitte geben Sie einen Kommentar ab, wenn Sie eine Antwort abgelehnt haben. Vielleicht war es nicht das Problem, das das Originalplakat hatte, aber es ist eine mögliche Ursache für die Fehlermeldung (ich hatte das Problem selbst).
Okroquette
2

Wir haben diesen Fehler erhalten, weil der Verzweigungsname ein Komma (,) hatte. Wir haben den lokalen Zweig gelöscht und ihn dann unter einem neuen Namen ohne Komma erneut überprüft. Wir konnten es erfolgreich zusammenführen.

Doug
quelle
Der Unterstrich scheint ebenfalls problematisch. +1
Anders Lindén
1
Ich benutze oft Unterstriche in Filialnamen @ AndersLindén
nzaleski
und Klammern waren auch problematisch ... + 1
Pablo Ezequiel
1

Für die Nachwelt: Wie AxeEffect sagte ... Wenn Sie keine Tippfehler haben, überprüfen Sie, ob Ihr lokaler Filialname lächerliche Zeichen wie Kommas oder Apostrophe enthält. Genau das ist mir gerade passiert.

Elder Smash
quelle
Oder unterstreichen. +1
Anders Lindén
1

Ich schlage vor, zu überprüfen, ob Sie zu dem Zweig wechseln können, mit dem Sie zusammenführen möchten.

Ich habe diesen Fehler erhalten, obwohl sich der Zweig, mit dem ich zusammenführen wollte, im lokalen Repository befand und es keine Rechtschreibfehler gab.

Ich habe meine lokalen Änderungen ignoriert, damit ich zum Zweig wechseln kann (Stash oder Commit können ebenfalls bevorzugt werden). Danach wechselte ich zurück zum ursprünglichen Zweig und die Zusammenführung war erfolgreich.

eaykin
quelle
0

Bei mir trat das Problem auf, als ich Folgendes versuchte:

git merge -s ours --no-commit --allow-unrelated-histories <remote name>/develop

Eigentlich hätte ich masterstattdessen schreiben sollen develop, denn Master war der Filialname von Subtree, nicht mein eigentlicher Zweig.

Levon Petrosyan
quelle
0

Das mag seltsam klingen, aber denken Sie daran, Ihre Git-E-Mail-Adresse und Ihren Namen einzurichten:

git config --global user.email "[email protected]"
git config --global user.name "FIRST_NAME LAST_NAME"
superarts.org
quelle
0

Für mich war das Problem das "doppelte Anführungszeichen" in der Zusammenführungsnachricht. Als ich die doppelte Markierung entfernte, funktionierte alles auf magische Weise. Ich hoffe, jemandem zu helfen. (Tut mir leid für mein schlechtes Englisch)

Aryelson Santos
quelle
0

Ich hatte einen Arbeitsbaum mit Master und einen anderen Zweig in zwei verschiedenen Arbeitsordnern ausgecheckt.

PS C:\rhipheusADO\Build> git worktree list
C:/rhipheusADO/Build         7d32e6e [vyas-cr-core]
C:/rhipheusADO/Build-master  91d418c [master]

PS C:\rhipheusADO\Build> cd ..\Build-master\

PS C:\rhipheusADO\Build-master> git merge 7d32e6e #Or any other intermediary commits
Updating 91d418c..7d32e6e
Fast-forward
 Pipeline/CR-MultiPool/azure-pipelines-auc.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

PS C:\rhipheusADO\Build-master> git ls-remote
From https://myorg.visualstudio.com/HelloWorldApp/_git/Build
53060bac18f9d4e7c619e5170c436e6049b63f25        HEAD
7d32e6ec76d5a5271caebc2555d5a3a84b703954        refs/heads/vyas-cr-core 

PS C:\rhipheusADO\Build-master> git merge 7d32e6ec76d5a5271caebc2555d5a3a84b703954
Already up-to-date

PS C:\rhipheusADO\Build>  git push
Total 0 (delta 0), reused 0 (delta 0)
To https://myorg.visualstudio.com/HelloWorldApp/_git/Build
   91d418c..7d32e6e  master -> master

Wenn Sie nur das neueste Commit zusammenführen müssen:

git merge origin/vyas-cr-core 
git push

Und ist das gleiche, was ich immer getan habe:

git checkout master # This is needed if you're not using worktrees
git pull origin vyas-cr-core
git push
Vyas Bharghava
quelle
0

Der Zweig, den Sie zusammenführen möchten, wird derzeit möglicherweise nicht von Ihrem Git identifiziert. Führen Sie also durch, git branch und prüfen Sie, ob der Zweig, den Sie zusammenführen möchten, nicht vorhanden ist. Wenn nicht, führen git pull Sie ihn aus. Wenn Sie dies tun git branch, ist der Zweig jetzt sichtbar. und jetzt trittst du aufgit merge <BranchName>

Yogeswaran
quelle