Ich möchte alle Dateien manuell mit meld oder einem anderen Diff-Tool zusammenführen. Wie kann ich das mit Git machen?
Wenn ich renne git mergetool
, heißt es no files need merging
. Ich kann es also nur tun, wenn ich Konflikte habe.
78
Antworten:
Es gibt einen viel einfacheren Weg:
git merge --no-commit merge_branch
Wie der Mensch sagt:
quelle
--no-ff
der Schnellvorlauf deaktiviert, was passiert, wenn keine Konflikte vorliegen.git mergetool
wenn es Konflikte gibt.Ich hatte ein Szenario, in dem:
habe gerade einen schnellen Vorlauf verursacht.
In diesem Fall können Sie Folgendes verwenden:
und dann können Sie Ihre Änderungen überprüfen
quelle
pull
ist nur die Kombination vonfetch
undmerge
zuerst anrufen,git fetch merge_branch
dann letztere tunmerge
--no-commit --no-ff
ist wie eine.gitattributes
Datei im Stammverzeichnis zu haben, die es enthält* -merge
, aber mit dermerge
Wahl, ob Sie es verwenden möchten oder nichtAutomatic merge went well; stopped before committing as requested
verstehe das. Wenn ich versuche zu laufengit mergetool
, heißt esNo files need merging
.Eine ähnliche Frage ist, wie man ein Automerge mit Git verhindert.
FractalSpace gab eine Antwort, die ich für nützlich halte:
Die Idee ist, Difftools anstelle von Tools zum automatischen Zusammenführen zu verwenden, um manuell auszuwählen, was Sie benötigen, und neue Dateien zu erstellen.
quelle
git merge
Antworten vergleicht, um die Dinge für alle anderen zu klären, die auf diese Seite stoßen.Hinweis: Wenn Sie darauf bestehen, manuell zusammengeführt zu werden (möglicherweise für eine bestimmte Klasse von Dateien), können Sie dennoch einen Zusammenführungstreiber definieren .
Sie haben ein konkretes Beispiel in " Git - wie man einen Zusammenführungskonflikt und eine manuelle Zusammenführung für eine ausgewählte Datei erzwingt ".
Auf diese Weise kann Ihr Merge-Treiberskript jedes gewünschte Merge-Tool aufrufen.
quelle
Für alle, die hierher gekommen sind und sich jetzt über den Unterschied zwischen der Antwort von @ True
git difftool
und den anderen Antworten, die verwendet werdengit merge
, wundern , siehe Git mergetool vs difftool .Kurz gesagt, wenn Sie git für die Verwendung eines modernen
diff.tool
Geräts wie kdiff3, meld oder vimdiff konfiguriert haben, können Sie mit diesem Diff-Tool manuell zusammenführen, und die Befehlszeile kann einfach sein:... können Sie so eine manuelle Zwei-Wege-Zusammenführung zwischen Ihrer aktuellen Niederlassung und other_branch durchführen (beschrieben als $ LOCAL und $ REMOTE in
man git-config
).Der "richtige" Weg, den die anderen Antworten diskutieren, wäre, stattdessen git so zu konfigurieren, dass zB kdiff3 oder vimdiff als Ihr verwendet werden
merge.tool
, und Folgendes zu verwenden:... dieser Befehl kann eine manuelle N-Wege-Zusammenführung zwischen $ BASE, $ LOCAL und $ REMOTE zu $ MERGED durchführen. Ein Beispiel für die Konfiguration von git finden Sie unter https://stackoverflow.com/a/2235841/1264797 . Sie müssen den
mergetool.*.cmd
Eintrag oft gar nicht konfigurieren, wenn Sie eines der Tools verwenden, die git bereits kennt. (Meld kann nur drei Fenster anzeigen. Wenn Sie also Meld mit den Standardeinstellungen verwenden, wird $ BASE nicht angezeigt.)Jemand könnte einspringen, um mich zu korrigieren, aber abgesehen von der N-Wege-Zusammenführungsfähigkeit scheinen die beiden Methoden das gleiche Ergebnis zu erzielen. Weder
difftool
nochmergetool
other_branch als übergeordnetes Element für das neue Commit hinzugefügt, daher ist in beiden Fällen die Zusammenführung in z. B. gitk nicht offensichtlich und müsste in der Commit-Nachricht beschrieben (und später bemerkt) werden.quelle
Ich fand die anderen Antworten unbefriedigend und wurde frustriert, als ich nach einer Antwort suchte. Eine Lösung für diese Frage habe ich endlich hier gefunden: https://stackoverflow.com/a/11593308/1351182
Sie werden dann aufgefordert (Datei für Datei, wenn Sie nicht angegeben haben
file
), welche "Hunks" Sie zusammenführen möchten. Auf diese Weise werden Sie durch jeden Teil des automatischen Zusammenführungsprozesses geführt und stattdessen nach einer manuellen Arbitrierung gefragt, welche Teile Sie aus demmergefrom
Zweig akzeptieren möchten . Hier ist ein Beispiel dafür, wie es in meinem Projekt aussah:Nach der Eingabe von
y
und<Enter>
wurde mir das nächste Stück(4/6)
für diese Datei angezeigt . Mit dieser Eingabeaufforderung unten können Sie einfach die Zusammenführung "Hunk" mit akzeptiereny
, ablehnenn
oder sogar manuell bearbeiten. Hier sind die Optionen:Ich wollte einen Teil manuell bearbeiten, da ich die Zusammenführung nicht genau so akzeptieren oder ablehnen wollte, wie sie gestellt wurde. Also entschied ich mich
e
und bekam eine Datei zum Bearbeiten. Ich war erfreut, als ich bemerkte, dass es unten sogar Anweisungen gab, wie man das Stück richtig bearbeitet. Mit der oben beschriebenens
Option können Sie sogar Teile in kleinere Teile aufteilen .Ich würde diesen Prozess empfehlen, wenn Sie eine manuelle Zusammenführung wünschen, bei der Sie den automatischen Prozess dennoch so weit wie möglich nutzen. Der Unterschied besteht darin, dass Sie jeden Zusammenführungs-Hunk überwachen und nach Belieben bearbeiten können. Ich hoffe das hilft zukünftigen Lesern.
Die Lösung, die ich mir vorgestellt hatte (aber nicht gefunden hatte), bestand im Grunde darin, jedes Zusammenführungsstück als Konflikt zu behandeln und die Konflikte manuell zu lösen. Jemand könnte wissen, wie dieser Ansatz funktioniert, zum Beispiel wenn es eine Zusammenführungsstrategie gibt, die jede Änderung als Konflikt behandelt! Bitte kommentieren Sie, wenn Sie einen Weg finden, dies zu tun. Es wäre langweiliger, aber vielleicht besser für manche Leute geeignet.
quelle
Ich wähle unsere Strategie aus (sie existiert auch als Auswahl in TortoiseGit), nachdem ich einen manuellen Diff durchgeführt habe, bei dem Sie die gewünschten Änderungen manuell vorgenommen haben.
Von: https://git-scm.com/docs/merge-strategies
Was Bitbucket später jedoch sieht, ist mir ein Rätsel. Es erkennt das Commit als Zusammenführen, kann aber den Zweig nicht zusammenführen (löst keine Pull-Anfrage) - wahrscheinlich könnte der Bitbucket-Guru in dieser Angelegenheit helfen, ich kann Ihnen nicht einmal etwas geben Protokolle / Fehlermeldungen, da ich diese Sichtbarkeit nicht habe - git / TortoiseGit beschwert sich jedoch überhaupt nicht.
quelle