Ich habe folgende Situation:
- Ich habe ein
clone
(Y) aus einem Haupt-Repository (X) erstellt, weil viele Leute an Y gearbeitet haben. Wir habenrebase
nurmerge
s gemacht. Wenn wir (push
) Y an X liefern wollen, möchten wir a machenrebase
, um die Dinge schön und sauber zu haben
Das Problem ist, dass rebase
wir dabei aufgefordert werden, alle Zusammenführungen durchzuführen, die wir bereits in den vorherigen merge
Schritten durchgeführt haben. Gibt es eine Lösung dafür neben der, die bedeutet, dass die Zusammenführungen tatsächlich wiederholt werden?
Ich habe erwartet, dass es ziemlich einfach sein wird, da wir die widersprüchlichen Zusammenschlüsse bereits gelöst haben.
git
merge
rebase
git-rebase
INS
quelle
quelle
Antworten:
Das Wiederherstellen, um einen "sauberen" Verlauf zu erhalten, wird überbewertet. Der beste Weg, wenn Sie den Verlauf beibehalten möchten, besteht darin, die Zusammenführung anstelle einer erneuten Basis durchzuführen. Auf diese Weise ist es genau das gleiche, das Sie während der Entwicklung getestet haben , wenn Sie jemals zu einer Revision zurückkehren müssen . Dies löst auch Ihr Problem mit den zuvor gelösten Zusammenführungskonflikten.
Wenn Sie den Verlauf nicht beibehalten möchten, können Sie einen neuen Zweig außerhalb des Masters erstellen, ihn auschecken und dann
git read-tree -u -m dev
Ihren Arbeitsbaum so aktualisieren, dass er mit demdev
Zweig übereinstimmt . Dann können Sie alles zu einem großen Commit festschreiben und es wie gewohnt zum Master zusammenführen.quelle
--squash
. Bei einer regelmäßigen Zusammenführung werden N oder N + 1 Commits zum Master hinzugefügt , wenn N Commits in der Verzweigung vorhanden waren. Der obige Vorschlag odermerge --squash
fügt immer nur ein einziges Commit zum Master hinzu.git merge --squash
ist jetzt meine bevorzugte Methode zur Neugründung nach viel Arbeit und vielen Zusammenführungen ( siehe diese Antwort ). Wenn der Zweig, an dem Sie arbeiten, aufgerufen wirdmy-branch
und Sie eine Basis erstellen möchten, gehen Sie wie folgt vormaster
:quelle
Zwei Bemerkungen:
git rerere
, was für diese Art von Situation der Fall ist.Weitere Informationen finden Sie unter
git rerere
.quelle
Sie können alle Änderungen in Ihrer Branche übernehmen und sie wie
master
folgt in ein neues Commit einfügen:Stellen Sie dann Ihre Dateien bereit und legen Sie fest.
quelle
In Bezug auf die Wiedergabe von Zusammenführungskonflikten können Sie mit git rerere eine Datenbank darüber verwalten, wie Zusammenführungskonflikte bereits gelöst wurden, sodass bei der Durchführung einer Neuausrichtung, die zu denselben Konflikten führt, die mühsamen Teile automatisch für Sie erledigt werden.
https://hackernoon.com/fix-conflicts-only-once-with-git-rerere-7d116b2cec67
git config --global rerere.enabled true
Das Einzige, worauf Sie achten müssen, ist, dass Sie etwas falsch gelöst haben es auch beim nächsten Mal automatisch für Sie borked wird und Sie es möglicherweise nicht wirklich bemerken.
Eine formellere Dokumentation finden Sie hier: https://git-scm.com/docs/git-rerere
quelle