GIT: Warum muss ich meine Zusammenführungskonflikte bei der Verwendung von Rebase zweimal lösen?

8

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?

    
Allan 09.02.2015, 17:08
quelle

2 Antworten

5

Ich habe festgestellt, dass die Git "rerere" -Funktion mein Problem gelöst hat.

Dokumentiert in: git rerere --help oder Ссылка

Hinzufügen zu meinem .gitconfig

%Vor%

Mein Problem wurde gelöst.

    
Allan 11.02.2015, 09:15
quelle
0

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:

%Vor%

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

weglassen     
joozek 09.02.2015 18:21
quelle

Tags und Links