421 Stimmen

Git merge meldet "bereits aktuell", obwohl es einen Unterschied gibt

Ich habe ein Git-Repository mit 2 Zweigen: Master und Test.

Es gibt Unterschiede zwischen Master- und Testzweigen.

Beide Zweige haben alle Änderungen übertragen.

Wenn ich es tue:

git checkout master  
git diff test

Es erscheint ein Bildschirm voller Änderungen, der die Unterschiede anzeigt. Ich möchte die Änderungen im Testzweig zusammenführen und tue dies auch:

git merge test

Sie erhalten jedoch die Meldung "Bereits aktuell".

Die Untersuchung der Dateien in den einzelnen Zweigen zeigt jedoch deutliche Unterschiede.

Wo liegt das Problem und wie kann ich es lösen?

0 Stimmen

Haben Sie nicht bestätigten geänderten Code?

0 Stimmen

225voto

Bombe Punkte 77831

Die Meldung "Bereits aktuell" bedeutet, dass alle Änderungen aus dem Zweig, den Sie zusammenführen wollen, bereits in den Zweig, in dem Sie sich gerade befinden, zusammengeführt wurden. Genauer gesagt bedeutet es, dass der Zweig, den Sie zusammenführen wollen ist ein Elternteil Ihres aktuellen Zweigs . Herzlichen Glückwunsch, das ist die einfachste Zusammenführung, die Sie je machen werden :)

Utilisez gitk um einen Blick in Ihr Repository zu werfen. Die Bezeichnung für den "Test"-Zweig sollte irgendwo unter der Bezeichnung für den "Master"-Zweig stehen.

Ihr Zweig ist in Bezug auf seine Muttergesellschaft auf dem neuesten Stand. Laut Merge gibt es keine neuen Änderungen im Elternzweig seit dem letzten Merge. Das bedeutet nicht, dass die Zweige identisch sind, denn Sie können viele Änderungen in Ihrem Arbeitszweig haben, und es klingt, als ob Sie das tun.

Bearbeiten 10/12/2019:

Laut Charles Drake im Kommentar zu dieser Antwort ist eine Lösung zur Behebung des Problems:

git checkout master
git reset --hard test

Dies führt zurück auf die Ebene "Test".

Dann tun Sie das:

git push --force origin master

um Änderungen zurück in das zentrale Repo zu erzwingen.

2 Stimmen

Heiliger Bimbam! Du hast recht! Ich denke, was passiert ist, war, dass ein anderer Zweig (Unstable Development) fälschlicherweise mit Master zusammengeführt wurde und der Testzweig eine Untermenge von Unstable war. Die Zusammenführung, die ich vornahm, sollte den Master-Zweig wieder auf die Testebene bringen.

2 Stimmen

Richtig. Diese Operation würde keinen Sinn machen, also weigert sich Git, etwas zu tun :)

27 Stimmen

Was ich jetzt gemacht habe, ist: git checkout master; git reset --hard test; Das bringt es zurück auf die Ebene "test". Dann habe ich ein "git push --force origin master" durchgeführt, um die Änderungen zurück in das zentrale Repository zu bringen.

186voto

ACarter Punkte 5040

Das passiert mir oft, wenn ich weiß, dass es Änderungen auf dem entfernten Master gibt, also versuche ich, sie mit git merge master . Dabei wird jedoch nicht mit dem entfernten Master zusammengeführt, sondern mit Ihrem lokalen Master.

Bevor Sie also die Zusammenführung durchführen, checken Sie Master aus, und dann git pull dort. Dann können Sie die neuen Änderungen in Ihrem Zweig zusammenführen.

9 Stimmen

Gibt es eine Möglichkeit, das Wechseln der Zweige zu vermeiden, z. B. durch einen Pull des zusammenzuführenden Zweigs, während man sich noch in dem Zweig befindet, in den zusammengeführt werden soll, und dann zusammenführen?

4 Stimmen

Ahh, schön. Ich dachte git fetch würde den Master-Zweig aktualisieren, auch wenn ich mich gerade in einem anderen Zweig befinde. Das tut es aber nicht. Vielen Dank! Ich bin mir ziemlich sicher, dass es eine Option gibt für fetch mit dem Sie angeben können, welchen Zweig Sie erhalten möchten.

2 Stimmen

@Raik Sie können tun git fetch --all aber das holt nur die Zweige, zieht sie aber nicht heraus.

63voto

Marek Stanley Punkte 1075

Angenommen, Sie haben eine Zweigstelle master mit der folgenden Commit-Historie:

A -- B -- C -- D

Nun erstellen Sie einen Testzweig, arbeiten daran und nehmen 4 Übertragungen vor:

                 E -- F -- G -- H
                /
A -- B -- C -- D

master zeigt mit dem Kopf nach D, und test Der Kopf zeigt nach H.

Die Meldung "Bereits aktuell" wird angezeigt, wenn der HEAD des Zweigs, in den Sie zusammenführen wollen, ein Elternteil der Kette von Commits des Zweigs ist, den Sie zusammenführen wollen. Das ist hier der Fall: D ist ein Elternteil von E .

Es gibt nichts zu verschmelzen von test a master da sich nichts geändert hat an master seither. Was Sie hier tun wollen, ist buchstäblich, Git zu sagen, dass es master Der Kopf von master zeigt auf H, so dass der Zweig von master den folgenden Verlauf der Übertragungen hat:

A -- B -- C -- D -- E -- F -- G -- H

Dies ist eine Aufgabe für den Befehl Git reset . Sie wollen auch, dass das Arbeitsverzeichnis diese Änderung widerspiegelt, also führen Sie eine hart zurücksetzen:

git reset --hard H

6 Stimmen

In der Vergangenheit wurde mir gesagt, dass die Verwendung von git reset --hard ist eine ziemlich drastische Maßnahme, kann sie Commits verlieren? Gibt es einen sichereren Weg, diese Änderungen vorzunehmen, oder sind die Gefahren von git reset --hard überbewertet?

2 Stimmen

Dieser Befehl ist vernünftig, keine Sorge. Ich würde sagen, das Einzige, worauf man bei dem Befehl --hard Option ist die Tatsache, dass sie Ihr Arbeitsverzeichnis verändert, was zur Folge hat, dass Sie nicht übertragene Änderungen verlieren. Ich persönlich mache eine git status vor und nach jedem manuell ausgeführten Git-Befehl, um sicherzustellen, dass mein Projektarchiv sauber ist oder sich im erwarteten Zustand befindet.

1 Stimmen

Dies führt zu der Statusmeldung "Your branch and 'origin/master' have diverged".

34voto

Stefan Pintilie Punkte 617

Das funktioniert bei mir. Nehmen wir an, Sie haben branch1 und Sie wollen es in branch2 .

Sie öffnen die Git-Befehlszeile, gehen zum Stammordner von branch2 und geben ein:

git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git push

Wenn Sie Konflikte haben, lösen Sie sie, bevor git push .

4 Stimmen

In git merge branch 1 erhalte ich ---> Already up to date. Merge made by the 'recursive' strategy. . Aber vorher in Zweig 1 habe ich git pull dann wurden alle Änderungen zurückgenommen. Was ist zu tun?

16voto

Justinas Jakavonis Punkte 7229

git merge origin/master stattdessen git merge master hat bei mir funktioniert. Um den Master-Zweig mit dem Feature-Zweig zusammenzuführen, können Sie also verwenden:

git checkout feature_branch
git merge origin/master

2 Stimmen

Sie brauchen keine ausstehenden Änderungen zu speichern. Fantastisch.

1 Stimmen

Ich verstehe es nicht, aber es hat bei mir funktioniert.

0 Stimmen

Das hat bei mir funktioniert. Es ist einfacher als Master auszuchecken und dann zusammenzuführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X