it-swarm.com.de

Wie füge ich alle Dateien manuell in Git zusammen?

Ich möchte alle Dateien zusammenführen manuell mit meld oder einem anderen Diff-Tool, wie kann ich das mit Git machen?
Wenn ich git mergetool es sagt no files need merging. Also kann ich es wohl nur tun, wenn ich Konflikte habe.

59
gennad

Es gibt viel einfachere Wege:

git merge --no-commit merge_branch

Wie der Mensch sagt:

Mit --no-commit Führen Sie die Zusammenführung durch, tun Sie aber so, als wäre die Zusammenführung fehlgeschlagen, und führen Sie keine automatische Festschreibung durch, um dem Benutzer die Möglichkeit zu geben, das Zusammenführungsergebnis vor dem Festschreiben zu überprüfen und weiter zu optimieren.

95
skywinder

Ich hatte ein Szenario, in dem:

git merge --no-commit merge_branch 

hat gerade einen schnellen Vorlauf verursacht.

In diesem Fall können Sie Folgendes verwenden:

git merge --no-commit --no-ff merge_branch

und dann können Sie Ihre Änderungen überprüfen

40
NSjonas

Eine ähnliche Frage ist Wie verhindert man, dass ein Automerge mit git erstellt wird?

FractalSpace gab eine Antwort, die ich für nützlich halte:

$ git checkout master
$ git difftool -t kdiff3 local-branch HEAD

Die Idee besteht darin, difftools anstelle von Tools zum automatischen Zusammenführen zu verwenden, um manuell das auszuwählen, was Sie benötigen, und neue Dateien zu erstellen.

18
True

Hinweis: Wenn Sie darauf bestehen, manuell zusammenzuführen (möglicherweise für eine bestimmte Dateiklasse), 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 Zusammenführungstreiberskript jedes gewünschte Zusammenführungstool aufrufen.

7
VonC

Für alle, die hierher gekommen sind und sich jetzt über den Unterschied zwischen @ Trues Antwort mit git difftool Und den anderen Antworten mit git merge Wundern, siehe Git mergetool vs difftool .

Kurz gesagt, wenn Sie git für die Verwendung eines modernen diff.tool Wie kdiff3, meld oder vimdiff konfiguriert haben, können Sie verschiedene Dateien mit dem Diff-Tool selbst manuell zusammenführen, und die Befehlszeile kann einfach sein :

git difftool other_branch

... auf diese Weise können Sie eine bidirektionale manuelle Zusammenführung zwischen Ihrem aktuellen Zweig und other_branch durchführen (beschrieben als $ LOCAL und $ REMOTE in man git-config).

Die "richtige" Art und Weise, wie die anderen Antworten diskutieren, wäre, stattdessen git so zu konfigurieren, dass z. kdiff3 oder vimdiff als merge.tool und benutze:

git merge --no-commit --no-ff other_branch
git mergetool

... Dieser Befehl kann eine manuelle N-Way-Zusammenführung zwischen $ BASE, $ LOCAL und $ REMOTE in $ MERGED ausführen. In https://stackoverflow.com/a/2235841/1264797 finden Sie ein Beispiel für die Konfiguration von git. Viele müssen den Eintrag mergetool.*.cmd Gar nicht konfigurieren, wenn Sie eines der Tools verwenden, die git bereits kennt. (Meld kann nur drei Fenster anzeigen. Wenn Sie also die Standardeinstellungen für meld verwenden, wird $ BASE nicht angezeigt.)

Jemand könnte einspringen, um mich zu korrigieren, aber abgesehen von der N-Way-Merge-Fähigkeit scheinen die beiden Methoden das gleiche Ergebnis zu erzielen. Weder difftool noch mergetool fügen andere_Zweige als übergeordnetes Element für das neue Festschreiben hinzu. In beiden Fällen ist die Zusammenführung z. gitk und müsste in der Commit-Nachricht beschrieben (und später bemerkt) werden.

3
stevegt

Ich wähle Strategie unsere (es gibt sie auch als Auswahl in TortoiseGit), nachdem Sie einen manuellen Vergleich durchgeführt haben, in dem Sie die gewünschten Änderungen manuell vorgenommen haben.

Von: https://git-scm.com/docs/merge-strategies

Der Merge-Mechanismus (git merge- und git pull-Befehle) ermöglicht die Auswahl der 'Merge-Strategien' des Backends mit der Option -s. Einige Strategien können auch ihre eigenen Optionen verwenden, die durch Angabe von -X-Argumenten für git merge und/oder git pull übergeben werden können.

unser

Dadurch wird eine beliebige Anzahl von Köpfen aufgelöst, aber der resultierende Baum der Zusammenführung ist immer der des aktuellen Zweigkopfs, wobei alle Änderungen aus allen anderen Zweigen effektiv ignoriert werden. Es soll verwendet werden, um die alte Entwicklungsgeschichte der Seitenzweige zu verdrängen. Beachten Sie, dass sich dies von der Option -Xours in Bezug auf die 'rekursive' Zusammenführungsstrategie unterscheidet.

Was Bitbucket später jedoch sieht, ist für mich ein Rätsel, es erkennt das Festschreiben als Zusammenführen, kann aber den Zweig nicht wirklich zusammenführen (löst keine Pull-Anfrage) - wahrscheinlich könnte Bitbucket-Guru bei diesem Problem helfen, ich kann Ihnen nicht einmal einen geben Logs/Fehlermeldungen, da ich diese Sichtbarkeit nicht habe - git/TortoiseGit beschwert sich aber überhaupt nicht.

0
Tomasz Janicki