Git zwingen, während einer Zusammenführung immer die neuere Version zu wählen?

103

Nehmen wir an, ich mergegit und es gibt einen Zusammenführungskonflikt.

Meine Frage ist: Wie kann ich git zwingen, immer die neuere Version des Codes in Konflikt zu wählen, damit ich den Konflikt nicht von Hand lösen muss?

Bartek
quelle
Ich möchte jedoch eine Zusammenführung durchführen (Commits nicht überschreiben), aber zusätzlich Konflikte automatisch lösen.
Bartek

Antworten:

188

Es ist nicht gerade die "neuere" Version, aber Sie können git anweisen, immer die Version auf dem aktuellen Zweig git merge branch -X ourszu bevorzugen oder die Version des Zweigs zu bevorzugen, der zusammengeführt wird git merge branch -X theirs.

Von man git-merge:

unsere:

Diese Option erzwingt, dass widersprüchliche Hunks automatisch automatisch aufgelöst werden, indem unsere Version bevorzugt wird. Änderungen gegenüber dem anderen Baum, die nicht mit unserer Seite in Konflikt stehen, werden im Zusammenführungsergebnis berücksichtigt. Bei einer Binärdatei wird der gesamte Inhalt von unserer Seite übernommen.

ihre:

Dies ist das Gegenteil von "unserem".

Renato Zannon
quelle
9
ours- theirs!! Sagen Sie es einfach und Sie verstehen, was der Befehl tut! Ich liebe Git! : D
Haywire
14
Hinweis: Wenn Sie bereits verwendet haben git merge branch, müssen git merge --abortSie dies tun , bevor Sie dies tun können.
John Dvorak
1
Funktioniert bei mir nicht Die Zusammenführung wird weiterhin abgebrochen. error: The following untracked working tree files would be overwritten by merge:Ich weiß nicht einmal, warum diese Dateien überhaupt in diesem Zweig sind, aber sie sollten überschrieben werden, und Git lehnt ab.
mcv
2
Wenn sie nicht verfolgt werden, müssen Sie git addsie zuerst entfernen (oder entfernen ). Lesen Sie ein bisschen darüber git clean, es kann Ihnen dabei helfen.
Renato Zannon
Nach ran , git merge ourswenn es einige Konfliktdateien sind, werden alle Protokoll sein? und könnte ich das verfolgen git merge ours?
zx1986
19

Ich benutze das,

git fetch --prune
git reset --hard origin/master
Wolfgang
quelle
2
Diese Lösung half mir, nicht zusammengeführte Konflikte zu beheben, wenn ich nur mit dem Hauptzweig überschreiben wollte. Ich habe Git Reset verwendet - Hard Master (von lokalen)
Juan Mendez