web-dev-qa-db-de.com

So testen Sie eine Zusammenführung, ohne sie zuerst zusammenzuführen

Gibt es eine Möglichkeit, einen git merge zwischen zwei Zweigen, dem aktuellen Arbeitszweig und dem Master, zu simulieren, ohne jedoch Änderungen vorzunehmen?

Ich habe oft Konflikte, wenn ich einen git merge machen muss. Gibt es eine Möglichkeit, die Verschmelzung zuerst zu simulieren?

130
dole doug

Ich glaube nicht, dass es eine Möglichkeit gibt, zu simulieren, was passieren wird, bis Sie die Zusammenführung ausprobieren. Wenn Sie jedoch sicherstellen, dass die Ausgabe von git status leer ist, bevor Sie die Zusammenführung durchführen, ist es ziemlich sicher, einfach fortzufahren und es auszuprobieren. Wenn Sie Konflikte bekommen, können Sie sofort in den Zustand zurückkehren, in dem Sie sich zuvor befanden.

git reset --merge

Seit git 1.7.4 können Sie die Zusammenführung auch abbrechen, indem Sie Folgendes tun:

git merge --abort

(Da die Festschreibungsnachricht, die diese Option hinzugefügt hat, erläutert , wurde dies aus Gründen der Konsistenz mit git rebase --abort usw. hinzugefügt.)

109
Mark Longair

Sie können git merge --no-commit verwenden, um zu verhindern, dass die Zusammenführung tatsächlich festgeschrieben wird. Wenn Sie nicht möchten, wie die Zusammenführung funktioniert, setzen Sie einfach den ursprünglichen Kopf zurück.

Wenn Sie die Zusammenführung definitiv nicht abschließen möchten, auch wenn es sich um einen Schnellvorlauf handelt (und somit per Definition keine Konflikte aufweist), können Sie auch --no-ff hinzufügen.

115
Amber

Wenn ich Änderungen an einem Themenzweig mit einem Master vergleichen möchte, finde ich es am einfachsten und sichersten, Folgendes zu tun:

git checkout master
git checkout -b trial_merge
git merge topic_branch

Nach Abschluss der Zusammenführung ist die konsolidierte Änderung vom Master aus leicht zu erkennen

git diff master

Wenn Sie fertig sind, löschen Sie einfach den Zweig trial_merge

git checkout master
git branch -D trial_merge

Auf diese Weise ändert sich der Master-Zweig niemals. 

81
Ian

Ich benutze :

git merge --ff-only

nach Dokumentation :

Verweigern Sie die Zusammenführung und beenden Sie den Vorgang mit einem Nicht-Null-Status, es sei denn, der aktuelle HEAD ist bereits auf dem neuesten Stand oder die Zusammenführung kann als Vorlauf aufgelöst werden.

Es handelt sich nicht wirklich um eine Simulation, da es im Falle von Konflikten zwischen den beiden Zweigen zu einer schnellen Zusammenführung kommen wird. Bei Konflikten werden Sie jedoch informiert und nichts passiert.

4
Ortomala Lokni

Ich konnte vor kurzem git merge --abort verwenden. Dies kann jedoch nur verwendet werden, wenn ein Zusammenführungskonflikt besteht. Wenn Sie sicher sind, dass Sie kein Commit ausführen möchten, verwenden Sie die anderen oben genannten Methoden.

4
bean5

Warum nicht einfach einen Wegwerfzweig (git checkout -b) erstellen und dort einen Test zusammenführen?

3
Mohan S Nayaka

Ich weiß nicht genau, ob es Ihr Fall ist, aber Ihre Frage erinnert mich daran, dass ich manchmal ein Feature beginne. 

An diesem Punkt verliere ich die Kontrolle über die genauen Dateien, die ich geändert habe, und ich weiß es erst, wenn mein Feature geschlossen wurde und mein Code entwickelt wurde.

In diesem Fall ist die Verwendung von Sourcetree ein guter Weg, um herauszufinden, welche Änderungen Sie vorgenommen haben (keine anderen Änderungen).

Sie müssen mit der rechten Maustaste auf den Basiszweig klicken und Diff Against Current auswählen:

 Sourcetree's feature to know the diff between two branches

Anschließend zeigt Ihnen sourcetree alle Änderungen, die beim Zusammenführen Ihrer Verzweigung mit der Basisverzweigung zusammengeführt werden.

 Results

Natürlich werden Ihnen die Konflikte nicht angezeigt, aber es ist ein nützliches Werkzeug für Zusammenführungen.

0