In meinem Repository habe ich einen Zweig namens, an aq
dem ich arbeite.
Ich habe dann neue Arbeit geleistet und Fehler gemacht master
.
Was ist der beste Weg, um diese Commits in die aq
Branche zu bringen? Erstellen Sie einen weiteren neuen Zweig aus master
und führen Sie ihn zusammen mit aq
?
git pull origin my_branch_name
Antworten:
Überprüfen Sie den
aq
Zweig und starten Sie ihn vonmaster
.quelle
git merge
wäre es besser. Wenn sich beide Zweige im Laufe der Zeit entwickelt haben, sollten Sie überlegen, welcher für Sie am besten geeignet ist.Sie sollten in der Lage sein, genau dann,
git merge origin/master
wenn Sie sich in Ihrem AQ-Zweig befinden.quelle
rebase
Sie diese Option, wenn Ihre Niederlassung lokal ist und nicht an sie weitergeleitet wurdeorigin
. Verwendenmerge
Sie diese Option, wenn Ihr Zweig bereits verschoben wurde.rebase
wird die Geschichte neu schreiben.Zuerst auschecken, um zu meistern:
Nehmen Sie alle Änderungen, Hotfixes und Commits vor und drücken Sie Ihren Master.
Gehen Sie zurück zu Ihrem Zweig, 'aq', und führen Sie den Master darin zusammen:
Ihre Filiale wird mit dem Master auf dem neuesten Stand sein. Ein gutes und grundlegendes Beispiel für das Zusammenführen ist 3.2 Git Branching - Basic Branching and Merging .
quelle
Es gibt keine Garantie dafür, dass die Master-Fehlerkorrekturen nicht zu den anderen Commits gehören. Daher können Sie sie nicht einfach zusammenführen. Tun
Angenommen, diese Commits stellen die Fehlerkorrekturen dar.
Bewahren Sie Fehlerbehebungen von nun an in einem separaten Zweig auf. Sie werden in der Lage sein, nur
wenn Sie sie alle in den regulären Entwicklungszweig rollen möchten.
quelle
Entweder
cherry-pick
die relevanten Commits in Zweigaq
oder Zweigmaster
in Zweig zusammenführenaq
.quelle
Füge es mit zusammen
aq
quelle
Einfacher Weg
quelle
Für mich hatte ich bereits Änderungen vorgenommen und wollte das Neueste aus der Basisbranche. Ich konnte es nicht
rebase
undcherry-pick
hätte ewig gedauert, also tat ich Folgendes:also in diesem Fall:
quelle
Dies ( von hier ) hat bei mir funktioniert:
Zitat:
quelle
Sie haben ein paar Möglichkeiten.
git rebase master aq
auf den Zweig, der die Festschreibungsnamen behält, aber NICHT REBASE, wenn dies ein entfernter Zweig ist. Sie können,git merge master aq
wenn Sie die Commit-Namen nicht behalten möchten. Wenn Sie die Commit-Namen behalten möchten und es sich um einen Remote-Zweig handelt, werdengit cherry-pick <commit hash>
die Commits auf Ihren Zweig übertragen.quelle
Sie können dies auch tun, indem Sie eine einzelne Zeile ausführen.
git merge aq master
Dies entspricht
quelle
git merge a b
führt Zweige zusammena
undb
in den aktuellen Zweig. Abergit merge a
wenn Sie auf einem Zweig sind,a
werden Sie nichts tun (weshalb dies ein bisschen so aussieht, als würde es das tun, was Sie denken, dass es tut). (Siehe git-scm.com/docs/git-merge#Documentation/… .)BEARBEITEN:
Meine Antwort unter Dokumenten eine Art und Weise zu verschmelzen
master
inaq
, wo , wenn Sie die Details der Zusammenführung sehen es die Änderungen auf Verzeichnisseaq
vor der Zusammenführung, nicht die Änderungen aufmaster
. Ich habe festgestellt, dass das wahrscheinlich nicht das ist, was du willst, auch wenn du denkst, dass es das ist!Gerade:
ist gut.
Ja, diese einfache Zusammenführung zeigt, dass die Änderungen von
master
zuaq
diesem Zeitpunkt vorgenommen wurden und nicht umgekehrt. aber das ist okay - da ist das passiert! Später, wenn Sie Ihren Zweig endgültig zusammenführenmaster
, zeigt eine Zusammenführung schließlich alle Ihre vorgenommenen Änderungen anmaster
(genau das, was Sie wollen, und ist das Commit, bei dem die Leute erwarten, dass sie diese Informationen sowieso finden).Ich habe es überprüft und der folgende Ansatz zeigt auch genau die gleichen Änderungen (alle Änderungen, die
aq
seit der ursprünglichen Aufteilung zwischenaq
und vorgenommen wurdenmaster
) wie der normale Ansatz oben, wenn Sie schließlich alles wieder zusammenführenmaster
. Daher denke ich, dass der einzige wirkliche Nachteil (abgesehen davon, dass er zu komplex und nicht standardisiert ist ...: - /) darin besteht, dass, wenn Sie die letzten Änderungen mit zurückführengit reset --hard HEAD~<n>
und dies über die Zusammenführung hinausgeht, die folgende Version die Liste zurückrollt 'falscher' Zweig, den Sie von Hand reparieren müssen (zB mitgit reflog
&git reset --hard [sha]
).[Also, was ich vorher dachte, war das:]
Es gibt ein Problem mit:
da die Änderungen, die im Merge-Commit angezeigt werden (z. B. wenn Sie jetzt oder später in Github, Bitbucket oder Ihrem bevorzugten lokalen Git-Verlaufs-Viewer suchen), die Änderungen sind, die am Master vorgenommen wurden und möglicherweise nicht Ihren Wünschen entsprechen.
Auf der anderen Seite
zeigt die in aq vorgenommenen Änderungen an, was wahrscheinlich das ist, was Sie wollen. (Oder zumindest ist es oft das, was ich will!) Aber die Zusammenführung mit den richtigen Änderungen befindet sich im falschen Zweig!
Wie zu bewältigen?!
Der vollständige Prozess, der mit einem Zusammenführungs-Commit endet, das die an aq vorgenommenen Änderungen anzeigt (gemäß der zweiten Zusammenführung oben), wobei sich die Zusammenführung jedoch auf den aq-Zweig auswirkt, lautet:
Dies: führt aq mit dem Master zusammen, spult die gleiche Zusammenführung mit aq vor, macht sie auf dem Master rückgängig und bringt Sie wieder auf aq!
Ich habe das Gefühl, dass mir etwas fehlt - dies scheint etwas zu sein, das Sie offensichtlich wollen würden, und etwas, das schwer zu tun ist.
Rebase ist auch NICHT gleichwertig. Es verliert die Zeitstempel und die Identität der auf aq getätigten Commits, was ich auch nicht will.
quelle
Szenario:
Lösung
quelle