BEARBEITEN:
Meine Antwort unter Dokumenten eine Art und Weise zu verschmelzen master
in aq
, wo , wenn Sie die Details der Zusammenführung sehen es die Änderungen auf Verzeichnisse aq
vor der Zusammenführung, nicht die Änderungen auf master
. Ich habe festgestellt, dass das wahrscheinlich nicht das ist, was du willst, auch wenn du denkst, dass es das ist!
Gerade:
git checkout aq
git merge master
ist gut.
Ja, diese einfache Zusammenführung zeigt, dass die Änderungen von master
zu aq
diesem Zeitpunkt vorgenommen wurden und nicht umgekehrt. aber das ist okay - da ist das passiert! Später, wenn Sie Ihren Zweig endgültig zusammenführen master
, zeigt eine Zusammenführung schließlich alle Ihre vorgenommenen Änderungen an master
(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 zwischen aq
und vorgenommen wurden master
) wie der normale Ansatz oben, wenn Sie schließlich alles wieder zusammenführen master
. 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ühren git 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 mit git reflog
& git reset --hard [sha]
).
[Also, was ich vorher dachte, war das:]
Es gibt ein Problem mit:
git checkout aq
git merge master
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
git checkout master
git merge aq
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:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
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.