Irgendwie ist mein master
und mein origin/master
Zweig haben sich auseinanderentwickelt.
Ich möchte eigentlich nicht, dass sie sich auseinanderentwickeln.
Wie kann ich diese Unterschiede sehen und zusammenführen sie?
Irgendwie ist mein master
und mein origin/master
Zweig haben sich auseinanderentwickelt.
Ich möchte eigentlich nicht, dass sie sich auseinanderentwickeln.
Wie kann ich diese Unterschiede sehen und zusammenführen sie?
In meinem Fall habe ich Folgendes getan, um das Problem zu lösen divergiert Nachricht: Ich habe git push
aber dann hat git commit --amend
um der Commit-Nachricht etwas hinzuzufügen. Dann habe ich eine weitere Übergabe durchgeführt.
In meinem Fall bedeutete das einfach, dass Ursprung/Master nicht mehr aktuell waren. Da ich wusste, dass niemand sonst origin/master anfasst, war die Korrektur trivial: git push -f
(wobei -f
bedeutet Kraft)
+1 für git push -f
um die Änderungen zu überschreiben, die zuvor committed und an den Ursprung übertragen wurden. Ich bin auch sicher, dass niemand sonst das Repository berührt hat.
Sehr riskanter Befehl. Bitte schreiben Sie eine kurze Information über den Risikofaktor des Befehls.
@Trickster: Ich hatte das Risiko bereits beschrieben: "da ich wusste, dass niemand sonst den Ursprung/Master berührte". Ich glaube, in diesem Fall ist dies kein riskanter Befehl.
In meinem Fall habe ich Änderungen an origin/master
und stellte dann fest, dass ich das nicht hätte tun sollen :-( Dies wurde durch die Tatsache erschwert, dass die lokalen Änderungen in einem Unterbaum lagen. Also ging ich zurück zum letzten guten Commit vor den "schlechten" lokalen Änderungen (mit SourceTree) und dann bekam ich die "Divergenzmeldung".
Nachdem ich mein Chaos vor Ort behoben hatte (die Details sind hier nicht wichtig), wollte ich die Fernbedienung "in der Zeit zurückdrehen". origin/master
Zweig, damit er mit dem lokalen Zweig synchronisiert ist. master
wieder. Die Lösung in meinem Fall war:
git push origin master -f
Beachten Sie die -f
(Kraft-)Schalter. Dies löschte die "schlechten Änderungen", die nach origin/master
und jetzt sind der lokale und der entfernte Zweig synchronisiert.
Bitte bedenken Sie, dass dies ein potenziell zerstörerischer Vorgang ist. Führen Sie ihn daher nur durch, wenn Sie sich zu 100 % sicher sind, dass das "Zurückversetzen" des entfernten Masters in der Zeit in Ordnung ist.
Ich bekomme You are not allowed to force push code to a protected branch on this project.
. Ich versuche, zu meiner Gabel zu kommen.
Ich weiß, dass es hier viele Antworten gibt, aber ich denke git reset --soft HEAD~1
verdient etwas Aufmerksamkeit, weil es Ihnen erlaubt, Änderungen im letzten . (nicht gepusht) begehen, während sie den divergierenden Zustand lösen. Ich denke, dies ist eine vielseitigere Lösung als Pull mit rebase
Denn der lokale Commit kann überprüft und sogar in einen anderen Zweig verschoben werden.
Der Schlüssel ist die Verwendung von --soft
anstelle des strengen --hard
. Wenn es mehr als eine Übertragung gibt, wird eine Variation von HEAD~x
sollte funktionieren. Hier sind also alle Schritte, die meine Situation gelöst haben (ich hatte 1 lokalen Commit und 8 Commits im Remote):
1) git reset --soft HEAD~1
um lokale Übertragungen rückgängig zu machen. Für die nächsten Schritte habe ich die Schnittstelle in SourceTree verwendet, aber ich denke, die folgenden Befehle sollten auch funktionieren:
2) git stash
um Änderungen von 1) zu verbergen. Jetzt sind alle Änderungen sicher und es gibt keine Abweichung mehr.
3) git pull
um die Fernänderungen zu erhalten.
4) git stash pop
o git stash apply
um die letzten zwischengespeicherten Änderungen anzuwenden, gefolgt von einer neuen Übertragung, falls gewünscht. Dieser Schritt ist optional, zusammen mit 2) wenn Sie die Änderungen in einem lokalen Commit verwerfen wollen. Auch wenn Sie auf einen anderen Zweig übertragen wollen, sollte dieser Schritt nach dem Wechsel zum gewünschten Zweig erfolgen.
Heutzutage ist die pull --rebase
ohnehin automatisch verstauen würde. stackoverflow.com/a/30209750/6309
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.
4 Stimmen
Was meinen Sie mit abweichend? Stellen Sie Ihren Master neu ein? nach Sie schieben es?
51 Stimmen
Ich erhalte die Meldung "Your branch and 'origin/master' have diverged, # and have 1 and 1 different commit(s) each, respectively".
0 Stimmen
Ich habe meine Antwort aktualisiert, um diese "abweichende" Warnmeldung zu berücksichtigen.
0 Stimmen
Die akzeptierte Antwort auf eine andere Frage kann auch hilfreich sein, um bestimmte Fälle zu lösen, in denen dies ins Spiel kommen könnte (z. B. wenn Sie versuchen, Ihren Master zu verschieben, er aber bereits verschoben wurde): stackoverflow.com/questions/2862590/
13 Stimmen
Die Erklärung in diesem Blog hat mir unendlich viel mehr geholfen als jede Antwort hier: sebgoo.blogspot.com/2012/02/
0 Stimmen
Das Wort, das Sie suchen, ist übrigens "konvergieren".
7 Stimmen
Um alle Änderungen an meinem eigenen lokalen Zweig rückgängig zu machen, nachdem er "abgewichen" war (Push und Pull erforderlich, wenn ich keine Änderungen vorgenommen habe, an die ich mich erinnern kann): git reset --hard origin/my-branch . Tun Sie dies nur, wenn Sie wissen, dass Sie keine lokalen Änderungen vorgenommen haben, die Sie behalten wollen.
0 Stimmen
Ich hatte Schwierigkeiten, das herauszufinden und habe schließlich einfach
git branch -D offending_branch && git fetch && git checkout offending_branch
und das Problem wurde behoben