it-swarm.com.de

Git mischen Berichte "Bereits auf dem neuesten Stand", obwohl ein Unterschied besteht

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

Es gibt Unterschiede zwischen Master- und Testzweigen.

Beide Filialen haben alle Änderungen übernommen.

Wenn ich mache:

 git checkout master
git diff test

Ein Bildschirm mit Änderungen erscheint und zeigt die Unterschiede. Ich möchte die Änderungen im Testzweig zusammenführen, und zwar so:

git Merge-Test

Erhalten Sie die Nachricht "Bereits auf dem neuesten Stand"

Die Prüfung von Dateien unter den verschiedenen Zweigen zeigt jedoch deutlich Unterschiede.

Was ist das Problem und wie löse ich es?

214
Charles Darke

Die Meldung "Bereits auf dem neuesten Stand" bedeutet, dass alle Änderungen des Zweigs, den Sie zusammenführen möchten, bereits mit dem Zweig verbunden sind, in dem Sie sich gerade befinden. Genauer gesagt bedeutet dies, dass der Zweig, den Sie zusammenführen möchten, ein übergeordneter Zweig Ihres aktuellen Zweigs ist. Glückwunsch, das ist die einfachste Zusammenführung, die Sie jemals machen werden. :)

Verwenden Sie gitk, um einen Blick auf Ihr Repository zu werfen. Das Label für den Zweig "Test" sollte sich irgendwo unter Ihrem Label "Master" befinden.

Ihre Niederlassung ist in Bezug auf ihre Muttergesellschaft auf dem neuesten Stand. Laut Zusammenführung gibt es seit der letzten Zusammenführung keine neuen Änderungen im übergeordneten Element. Das bedeutet nicht, dass die Zweige gleich sind, da in Ihrem Arbeitszweig viele Änderungen vorgenommen werden können und es sich so anhört, als würden Sie es tun. 

111
Bombe

Das passiert mir oft, wenn ich weiß, dass sich Änderungen am Remote-Master befinden. Ich versuche, sie mit git merge master zusammenzuführen. Dies verschmilzt jedoch nicht mit dem Remote-Master, sondern mit Ihrem lokalen Master.

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

99
ACarter

Angenommen, Sie haben einen Zweig master

Jetzt erstellen Sie einen Verzweigungstest, arbeiten daran und machen 4 Commits:


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

Der Kopf von master

Dies ist ein Job für den Git-Befehlreset. Sie möchten auch, dass das Arbeitsverzeichnis diese Änderung widerspiegelt, so dass Sie ein hard reset ausführen:

git reset --hard H
33
Marek Stanley

Eine Zusammenführung erfolgt immer zwischen dem aktuellen HEAD und einem oder mehreren Commits (in der Regel Zweigkopf oder Tag).
und die Indexdatei muss mit dem Baum des HEAD - Commits übereinstimmen (d. h. dem Inhalt des letzten Commits), wenn er startet.
Mit anderen Worten, git diff --cached HEAD muss keine Änderungen melden. 

Das zusammengeführte Commit ist bereits in HEAD enthalten. Dies ist der einfachste Fall, der als "Bereits aktuell" bezeichnet wird.

Das bedeutet, dass die Commits im Test bereits im Master zusammengeführt werden. Da jedoch andere Commits auf Master ausgeführt werden, würde git diff test noch einige Unterschiede ergeben.

6
VonC

Dies geschah mir, weil GIT seltsamerweise dachte, dass sich der lokale Zweig von dem entfernten Zweig unterschied ... .. Dies war im Zweigdiagramm sichtbar: Es wurden zwei verschiedene Zweige angezeigt: Fernbedienungen/Ursprung/Zweigname und Zweigname.

Die Lösung bestand einfach darin, das lokale Repo zu entfernen und es aus der Ferne erneut zu klonen. Auf diese Weise würde die GIT verstehen, dass die Fernbedienungen/Origin/branch_name> und branch_name tatsächlich gleich sind, und ich könnte den git merge branch_name ausgeben.

rm <my_repo>
git clone <my_repo>
cd <my_repo>
git checkout <branch_name>
git pull
git checkout master
git merge <branch_name>
4
cdupont

Dies geschieht, weil Ihre lokale Kopie des Zweigs, den Sie zusammenführen möchten, nicht mehr aktuell ist. Ich habe meinen Zweig namens MyBranch und möchte ihn in ProjectMaster zusammenführen.

_>git status
On branch MyBranch-Issue2
Your branch is up-to-date with 'Origin/MyBranch-Issue2'.

nothing to commit, working tree clean

_>git merge ProjectMaster
Already up-to-date.

Aber ich weiß dass es Änderungen gibt, die zusammengefügt werden müssen! 

Wenn ich git merge ProjectMaster eingebe, sieht git auf meine lokale Kopie dieses Zweigs, die möglicherweise nicht aktuell ist . Um zu sehen, ob dies der Fall ist, sage ich Git zuerst, ob meine Zweige nicht mehr aktuell sind, und ruft alle Änderungen ab, wenn dies der Fall ist, ähm, fetch. Dann hüpfe ich in die Branche, die ich zusammenführen möchte, um zu sehen, was dort passiert ...

_>git fetch Origin

_>git checkout ProjectMaster
Switched to branch ProjectMaster
**Your branch is behind 'Origin/ProjectMaster' by 85 commits, and can be fast-forwarded.**
  (use "git pull" to update your local branch)

Ah-ha! Meine lokale Kopie ist von 85 Commits abgelaufen, das erklärt alles! Jetzt Pull die Änderungen, die ich vermisse, runter, hüpfe dann zu MyBranch und versuche die Zusammenführung erneut.

_>git pull
Updating 669f825..5b49912
Fast-forward

_>git checkout MyBranch-Issue2
Switched to branch MyBranch-Issue2
Your branch is up-to-date with 'Origin/MyBranch-Issue2'.

_>git merge ProjectMaster
Auto-merging Runbooks/File1.ps1
CONFLICT (content): Merge conflict in Runbooks/Runbooks/File1.ps1

Automatic merge failed; fix conflicts and then commit the result.

Und jetzt muss ich noch ein Problem beheben ...

3
FoxDeploy

Konfrontierte dieses Szenario mit Git Bash.

Unser Repository hat mehrere Zweige, und jeder Zweig hat einen anderen Festschreibungszyklus, und die Zusammenführung findet ab und zu statt

Old_Branch wurde mit einigen Änderungen aktualisiert, die mit New_Branch zusammengeführt werden mussten

Wurde unterhalb des Pull-Befehls ohne Verzweigung verwendet, um alle Quellen aus allen Zweigen abzurufen.

git ziehen Origin

Seltsamerweise zieht dies nicht alle Verpflichtungen von allen Zweigen ab. Hatte es so gedacht, als die angezeigten fast alle Äste und Tags zeigt.

Um dieses Problem zu beheben, hat die Old_Branch die neueste Verwendung herausgezogen

git checkout Old_Branch

git pull Origin Old_Branch

Jetzt checkte New_Branch aus

git checkout New_Branch

Zog es, um sicher zu sein

git pull Origin New_Branch

git merge Old_Branch

Und Bratsche bekam Konflikte von Old_Branch bis New_Branch :), die erwartet wurden

2
satlead

ich war glücklich und wurde zu dieser Seite geschickt. Ich war mir nicht sicher, ob ich das gleiche Szenario hatte, aber es war mein Versuch, diesen "Test" -Zweig neu zusammenzuführen.

Ich habe es also zuvor zusammengefügt, aber ich schließe absichtlich einige spezifische Änderungen während der Zusammenführung aus, so dass es offensichtlich einige Unterschiede zwischen den Zweigen gibt. Ich habe dann versucht, es wieder zusammenzuführen, weil ich feststelle/vergesse, dass ich eine bestimmte Änderung/Datei hätte hinzufügen wollen und wollte, die ich zuvor ausgeschlossen habe , aber ich habe mich geirrt und bekomme stattdessen die Meldung "Bereits auf dem neuesten Stand".

Nachdem ich @ Bombes Kommentar/Antwort gelesen hatte, hat er Recht, und ich denke, er verhält sich auf diese Weise. Was ich tat, war die Sicherung der Dateien auf dem Testzweig es ist, als ob es neue Änderungen wäre.

ich bin nicht sicher, ob dies der richtige Weg ist oder anderen helfen könnte, die dasselbe Problem haben, aber es hat eine Lösung für meinen speziellen Fall geliefert.

2
bubjavier

git merge Origin/master stattdessen git merge master arbeitete für mich. Um den Master mit dem Feature-Zweig zusammenzuführen, können Sie Folgendes verwenden:

git checkout feature_branch
git merge Origin/master
2
Justas

Was für mich funktioniert, nehmen wir an, Sie haben branch1 und möchten es in branch2 einbinden.

Öffnen Sie die Git-Befehlszeile, gehen Sie zum Stammverzeichnis von branch2 und geben Sie Folgendes ein:

git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git Push

Wenn Sie Konflikte haben, müssen Sie nicht git Push ausführen, sondern lösen zuerst die Konflikte und dann Push.

2
Stefan Pintilie

Wenn beim Zusammenführen von Zweig A in Zweig B "Bereits auf dem neuesten Stand" angezeigt wird, ist die Umkehrung nicht immer wahr. Dies trifft nur zu, wenn Zweig B von Zweig A abstammt. Andernfalls kann der Zweig Zweig B nur Änderungen aufweisen, die nicht in A liegen. 

Beispiel:

  1. Sie erstellen die Zweige A und B aus Master
  2. Sie nehmen einige Änderungen in master vor und führen diese Änderungen nur in Zweig B zusammen (Aktualisierung oder Verzicht auf Aktualisierung von Zweig A).
  3. Sie nehmen einige Änderungen in Zweig A vor und führen A und B zusammen.

An diesem Punkt meldet das Zusammenführen von A nach B "Bereits auf dem neuesten Stand", aber die Zweige unterscheiden sich, da in Zweig B Aktualisierungen vom Master vorgenommen werden, während Zweig A dies nicht tut. 

2

Achten Sie darauf, dass Sie zuerst den Zweig, den Sie zusammenführen möchten, auschecken, und ziehen Sie ihn dann heraus (damit Ihre lokale Version der Remote-Version entspricht). 

Dann checken Sie zurück zu Ihrem Zweig, in dem Sie die Zusammenführung durchführen möchten, und Ihre Git-Zusammenführung sollte funktionieren.

1
John Murphy

Dasselbe passierte für mich ... __ Aber das Szenario war ein wenig anders, ich hatte einen Master-Zweig und habe Release_1 herausgesagt (sagen wir). Einige Änderungen in Version_1 wurden vorgenommen und in Origin zusammengeführt. dann habe ich ssh gemacht und auf dem Remote-Server Ich checke erneut release_1 mit dem Befehl git checkout -b release_1 aus, der tatsächlich einen neuen Zweig release_ auszeichnet! vom Master aus, anstatt den bereits vorhandenen Zweig release_1 von Origin ..__ auszuchecken. Das Problem wurde gelöst, indem der Schalter "-b" entfernt wurde 

0
Deepika Anand

Ich hatte das gleiche Problem. Ich hatte Änderungen an der Fernbedienung und es wurde immer noch "Bereits auf dem neuesten Stand" angezeigt. Das Replonieren des Repositorys hat das Problem für mich behoben.

0
Mohammad Rayan