Github kann nicht merge branch, keine Konflikte, es manuell auto-merges
Habe ich einen pull-request, dass Github sagt, es kann nicht automatisch Zusammenführen. Diese änderung ist hinter dem master einige commits, aber ohne Konflikte.
Manuell Zusammenfügen, ich bekomme keine Konflikte, und bekomme ich diese Ausgabe:
(on master)
$git merge otherbranch
[vim pops up for commit message, :wq]
Auto-merging <file>
Merge made by the 'recursive' strategy.
<file> | 1 +
1 file changed, 1 insertion(+)
Ist, warum Github nicht automatisch Zusammenführen? Es automatisch zusammengeführt, von der Befehlszeile aus sowieso. Ist dieses nicht automatisch genug für Github?
InformationsquelleAutor jpimentel | 2013-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist, dass
git merge
verwendet eine Strategie namens "rekursiven" mergen standardmäßig. Es ist in der Lage zu führen Sie die 3-Wege-Zusammenführung: der patch von einer Seite, und die Anwendung des Patches auf der anderen Seite, erzeugt eine neue Datei. Es tut dies auch rekursiv, in komplizierteren Situationen, in denen eine Menge von Verzweigungen und Zusammenführungen geschehen und es gibt mehreren merge-Basen für die beiden commits zusammengeführt.Ich vor kurzem begegnet die gleiche situation:
Mit 2 merge-Grundlagen, ein 3-Wege-merge ist nicht möglich. Der 'recursive' Strategie ist es daher, dieses Problem gelöst, indem zuerst recursing in einem Zusammenführen dieser beiden verpflichtet:
OK, nur eine merge-base, also die 3-Wege-Zusammenführung beginnen kann. was die änderungen auf beiden Seiten?
Diese beiden diffs sowohl änderungen an der gleichen Datei, so dass Sie nicht gelöst werden kann mit einer einfachen Strategie, einfach nur die neuere version von jeder Datei von jeder Seite (eine index merge). Stattdessen git nimmt die neue Datei von einer Seite, und versucht, den patch von der anderen Seite. Das Ergebnis ist eine kombinierte verpflichten, die simuliert werden können, wie diese:
Es dann zurück in die ursprüngliche 3-Weg-Zusammenführung, mit diesem Ergebnis verschmelzen als Ausgangspunkt; und dies betrifft auch änderungen an der selben Datei:
Aber wieder die änderungen sind zu verschiedenen Abschnitten der Datei, und so unter dem diff und Anwendung auf der anderen Seite erfolgreich ist.
So, C git in der Lage war, diese zu lösen Zusammenführen, indem Sie zuerst tun, eine 3-Wege-merge auf die beiden Seriendruck-Grundlagen der zwei Ausgangspunkte, und dann ein weiteres 3-Wege-merge auf die beiden ursprünglichen begeht zusammengeführt und das Zwischenergebnis der ersten Zusammenführung.
Github ist die automatische Auflösung nicht tun. Es ist nicht unbedingt unfähig, und ich bin mir nicht sicher, wie viel von der rekursive Strategie, die es gilt umzusetzen, aber es ist irrenden auf der Seite der Vorsicht, das ist genau das, was Sie erwarten, eine große grüne Taste, wie das zu tun :-).
InformationsquelleAutor samv
Nein, es ist nicht über das Zusammenführen. Es wird über Rebase.
Sollten Sie versuchen, Stellungswechsel, in Ihrem lokalen repo (geklont von deine Gabel),
otherbranch
obenmaster
.Erste, sicherstellen, dass der master ist der jüngste von der ursprünglichen upstream-repo:
Dass rebase generiert Konflikte, die Sie lösen sollen,
git add
, und danngit rebase --continue
.Schließlich einfach
push --force
Ihren Zweig zu deiner Gabel: , aktualisieren Sie Ihre pull-request automatisch (sonst nichts zu tun).(wenn es schon schob einmal eine
git push
allein sollte genug sein)Sehen weitere Tipps über pull-requests hier.
InformationsquelleAutor VonC
Standardmäßig Git nicht weiß, ob er kann auto-merge Ihre Niederlassung haben oder nicht, vor der Bestätigung die commit-Nachricht für den merge-commit.
Wenn Sie wissen, Sie haben keine Konflikte, Sie können diesen Prozess automatisieren, rekursiver auto-Verschmelzung durch ändern
GIT_EDITOR
zu nicht-interaktiven Tools, zum Beispiel durch hinzufügencat
odertrue
:Das gleiche für
pull
. Sie können auch angeben, merging-Strategie wie-X theirs
oder-X ours
.oder eine andere Methode ist, um Stellungswechsel (hinzufügen
-r
zu Ihrempull
Befehl).InformationsquelleAutor kenorb