Ich mag die git pull --rebase
-Option sehr, aber wenn ich sie zusammen mit einem Merge-Konflikt benutze, löse ich meine Konflikte zweimal. Ich habe versucht, git pull --rebase=preserve
zu verwenden, was es auch in Betracht ziehen sollte, merges.
Sehen Sie sich das folgende Beispiel an:
%Vor% Wenn ich git pull --rebase=preserve
durch git pull --no-rebase
ersetze, funktioniert es wie erwartet (ich muss die Konflikte nur einmal lösen), aber dann muss ich mir all diese Zusammenführungs-Commits in meinem Protokoll ansehen.
Wie kann ich git "Rebase" zum Zusammenführen und Konfliktlösen machen, so dass es oben auf dem neuen Remote HEAD Platz findet?
Rebase akzeptiert im Prinzip nur Commits zwischen HEAD
und base
und wendet sie nacheinander auf base
an. Das heißt, wenn Sie einige Zusammenführungen zwischen ihnen hatten, sind sie verloren und Sie müssen Konflikte erneut lösen. Abbildung:
Nehmen wir an, Sie haben folgenden Baum:
%Vor% M
ist die Zusammenführung der widersprüchlichen Änderungen B
und C
und es ist Ihre HEAD
. Wenn Sie jetzt git rebase A
ausführen, versucht git, folgenden Baum zu erstellen:
Wenn Sie C
auf B
anwenden, wird jedoch ein Konflikt angezeigt. Wenn Sie merge M
ignoriert haben, müssen Sie den Benutzer bitten, das Problem zu lösen.
An dieser Stelle können Sie nur die fraglichen Dateien von der Revision M
auschecken, die sie bereits zusammengeführt haben: git checkout M -- file/with/conflict
, aber ich kenne keine Möglichkeit, dies automatisch zu tun ( zB Rebase-Option).
Um ehrlich zu sein, verstehe ich die Abneigung der Leute gegenüber Zusammenführungen wirklich nicht, ich persönlich sehe sie als nützlich, aber wenn Sie wollen, können Sie sie im Protokoll mit --no-merges
Tags und Links git git-branch