2016-10-20 3 views
0

git rebase --preserve-mergesBeispiele für manuelle Änderungen verpflichtet fusionieren

Der Doc sagt, dass „Commits Konfliktlösungen oder manuelle Änderungen zusammenführen fusionieren, werden nicht beibehalten“.

Ich verstehe, wie Mischkonflikte mit rerere behandelt werden können, aber was genau sind manuelle Änderungen zu verschmelzen Commits? Geht das auch mit ? Wenn nicht, gibt es einen Workaround?

Antwort

1

Das Dokument sagt, dass "Konflikt Konfliktlösungen oder manuelle Änderungen zu verschmelzen Commits nicht beibehalten werden".

Was dieser Satz sagt (nicht sehr gut) ist, dass mit --preserve-merges, git rebase tatsächlich Wieder tut die Zusammenführung.

Es ist im Allgemeinen nicht möglich, die ursprüngliche Zusammenführung beizubehalten, und Git versucht es einfach nicht. Stattdessen stellt sie fest, dass Original begehen M eine Zusammenführung mit extra Eltern war (en) p2, p3, ..., pN die über die Eltern in der Kette Sie Rebasing. Also, beim Kopieren M, anstatt zu tun, tut es git merge p2 .... Dies macht natürlich eine komplett neue Zusammenführung.

Der Rebase-Code passt Ihre rerere Einstellungen überhaupt nicht an, so dass Sie bekommen, was auch immer Sie eingestellt haben.

... was genau sind manuelle Änderungen zu verschmelzen Commits?

Die am besten durch Beispiel ist wahrscheinlich demonstriert:

$ git checkout br1 
$ git merge --no-commit br2 
Automatic merge went well; stopped before committing as requested 
$ git status --short 
A file2 
$ echo 'sneaky sneaky' >> file2 
$ git add file2 
$ git commit --no-edit 
[br1 86ea409] Merge commit 'br2' into br1 

Die Linie I file2 hinzugefügt nirgends in jedem Zweig erscheint: Ich habe es manuell geändert.

(Gleichwertig, konnte ich lasse die Zusammenführung tun ein Auto-commit, und verwenden Sie git commit --amend danach, die Aufhebung des ursprünglichen merge schubst und stellt eine neue Serie in Stelle mit, was ich git add ed in den Index haben seitdem.)

+0

Wie üblich ist dieses Beispiel oder irgendwelche manuellen Änderungen? Meine Absicht war es, meine Arbeit nach den Bewertungen zu rebasieren, aber ich habe einige Branchen erlebt, die auch die Commits von anderen geteilt haben. – user1164937

+0

Mit etwas Glück, * das ist ein besonderer Fall extrem selten: das ist, was ich (und andere) eine "böse Verschmelzung" nennen, da es Zeug reinsteckt, das ursprünglich nicht in jedem Zweig war, aber eindeutig * hätte sein sollen *. Andere, vernünftigere Fälle, wie z. B. manuell gelöste Konflikte, bei denen einige geringfügige Optimierungen erforderlich sind (über das Auswählen einer einzigen Version hinausgehend), sind ziemlich häufig. – torek

+0

Bummer. Ich denke, ich werde mich hauptsächlich an lokale Rebases halten und nur weitere Commits rebasen und Push forschen, wenn ich der einzige Autor am Ende der Rezension bin. Verwenden Sie Merge-Commits, wenn andere Personen beteiligt sind. Ich denke, dass das Rebasing von geteilten Filialen für Organisationen mit strengen Richtlinien am besten ist. – user1164937