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 eine machen muss git merge
. Gibt es eine Möglichkeit, die Zusammenführung zuerst zu simulieren?
Antworten:
Ich glaube nicht, dass es eine Möglichkeit gibt, zu simulieren, was passieren wird, bis Sie die Zusammenführung versuchen. 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 zu versuchen. Wenn Sie Konflikte bekommen, können Sie sofort zu dem Zustand zurückkehren, in dem Sie zuvor waren:Seit Git 1.7.4 können Sie die Zusammenführung auch abbrechen, indem Sie Folgendes tun:
(Wie in der Festschreibungsnachricht, die diese Option hinzugefügt hat, erläutert wird , wurde diese aus Gründen der Konsistenz
git rebase --abort
usw. hinzugefügt .)quelle
--no-commit
ist meiner Meinung nach viel einfacher--no-commit
Sie immer noch den Index und den Arbeitsbaum ändern, was nicht genau "ohne Änderungen" ist :) Mein Punkt ist, wenn Leute diese Art von Fragen stellen Frage, es ist im Allgemeinen, weil sie nicht wissen, dass der beste Weg, um zu sehen, wie eine Zusammenführung verlaufen würde, darin besteht, einfach die Zusammenführung zu versuchen , oft weil sie nicht wissen, wie einfach es ist, zu dem Zustand zurückzukehren, in dem sie sich zuvor befanden wenn sich herausstellte, dass es Probleme gab.git merge --abort
ist gleichbedeutend mit demgit reset --merge
Zeitpunkt, an demMERGE_HEAD
es vorhanden ist", also was auch immer leichter zu merken ist :)Sie können verwenden
git merge --no-commit
, um zu verhindern, dass die Zusammenführung tatsächlich festgeschrieben wird. Wenn Ihnen die Funktionsweise der Zusammenführung nicht gefällt, setzen Sie sie einfach auf den ursprünglichen Kopf zurück.Wenn Sie die Zusammenführung definitiv nicht abschließen möchten, auch wenn es sich um einen schnellen Vorlauf handelt (und somit per Definition keine Konflikte aufweist), können Sie dies ebenfalls hinzufügen
--no-ff
.quelle
git merge --abort
es das gibt - vielleicht meinst du dasgit reset --merge
?rebase
dazu kein--abort
For gibtgit merge
.--no-ff
. Damit es nicht zu einer Zusammenführung kommt.--no-ff
ist hier so ziemlich obligatorisch, da--no-commit
Änderungen beim schnellen Vorlauf nicht aufhören.Wenn ich Änderungen an einem Themenzweig mit dem Master vergleichen möchte, finde ich es am einfachsten und sichersten, Folgendes zu tun:
Nach Abschluss der Zusammenführung ist die konsolidierte Änderung vom Master leicht zu erkennen
Wenn Sie fertig sind, löschen Sie einfach den Zweig trial_merge
Auf diese Weise ändert sich der Hauptzweig nie.
quelle
git checkout --detach
alles tun und testen, was Sie wollen. Wenn Sie Ihre Änderungen später beibehalten möchten, tun Sie diesgit checkout -b new_branch
. Und wenn Sie Ihre Änderungen wegwerfen möchten, checken Sie einen beliebigen Zweig aus (git checkout master
).topic_branch
es riesig ist (wie es wahrscheinlich der Fall ist, wenn Sie sich überhaupt mit dieser Frage befassen), ist diediff master
Ausgabe wahrscheinlich zu groß, als dass Sie sie in Augenschein nehmen könnten, wenn eine Zusammenführung zu Konflikten führen würde.Ich benutze :
laut Dokumentation :
Es ist nicht wirklich eine Simulation, da es zu einem schnellen Vorlauf kommt, wenn keine Konflikte zwischen den beiden Zweigen auftreten. Im Falle von Konflikten werden Sie jedoch informiert und es passiert nichts.
quelle
Ich konnte in
git merge --abort
letzter Zeit verwenden. Dies kann jedoch nur verwendet werden, wenn ein Zusammenführungskonflikt vorliegt. Wenn Sie sicher sind, dass Sie kein Commit durchführen möchten, verwenden Sie die anderen oben genannten Methoden.quelle
git merge --abort
. Sie sollten Ihre Antwort in Zukunft prüfen, indem Sie angeben, wer die Antwort geschrieben hat, auf die Sie sich beziehen.Warum nicht einfach einen Wegwerfzweig erstellen (git checkout -b) und dort eine Testzusammenführung durchführen?
quelle
Ich weiß nicht genau, ob es Ihr Fall ist , aber Ihre Frage erinnert mich daran, dass ich manchmal ein Feature starte, mich im Laufe der Tage verpflichte und die Entwicklung darauf viele Male zusammenführe.
In diesem Punkt verliere ich die Kontrolle über die genauen Dateien, die ich geändert habe, und ich werde es erst erfahren, wenn meine Funktion geschlossen wurde und mein Code entwickelt wird.
In diesem Fall können Sie anhand von Sourcetree feststellen, welche Änderungen Sie vorgenommen haben (nicht anders als bei den Zusammenführungen).
Sie müssen mit der rechten Maustaste auf den Basiszweig klicken und Folgendes auswählen
Diff Against Current
:Dann zeigt Ihnen Sourcetree alle Änderungen, die zusammengeführt werden, wenn Sie Ihren Zweig in den Basiszweig zusammenführen.
Natürlich werden die Konflikte nicht angezeigt, aber es ist ein nützliches Werkzeug für Zusammenführungen.
quelle