Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
-
2.52.0
2025-11-17
- 2.51.2 keine Änderungen
-
2.51.1
2025-10-15
- 2.50.1 → 2.51.0 keine Änderungen
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 keine Änderungen
-
2.45.0
2024-04-29
- 2.43.1 → 2.44.4 keine Änderungen
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 keine Änderungen
-
2.41.0
2023-06-01
- 2.38.3 → 2.40.4 keine Änderungen
-
2.38.2
2022-12-11
- 2.38.1 keine Änderungen
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 keine Änderungen
-
2.37.0
2022-06-27
- 2.31.1 → 2.36.6 keine Änderungen
-
2.31.0
2021-03-15
- 2.22.1 → 2.30.9 keine Änderungen
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 keine Änderungen
-
2.20.0
2018-12-09
- 2.12.5 → 2.19.6 keine Änderungen
-
2.11.4
2017-09-22
- 2.2.3 → 2.10.5 keine Änderungen
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
BESCHREIBUNG
Verwenden Sie git mergetool, um eines von mehreren Merge-Dienstprogrammen zum Beheben von Merge-Konflikten auszuführen. Es wird typischerweise nach git merge ausgeführt.
Wenn ein oder mehrere <Datei>-Parameter angegeben werden, wird das Merge-Tool-Programm ausgeführt, um Unterschiede in jeder Datei zu beheben (Dateien ohne Konflikte werden übersprungen). Die Angabe eines Verzeichnisses schließt alle ungelösten Dateien in diesem Pfad ein. Wenn keine <Datei>-Namen angegeben werden, führt git mergetool das Merge-Tool-Programm für jede Datei mit Merge-Konflikten aus.
OPTIONEN
-t<tool>--tool=<tool>-
Verwenden Sie das durch <tool> angegebene Merge-Auflösungsprogramm. Gültige Werte sind
emerge,gvimdiff,kdiff3,meld,vimdiffundtortoisemerge. Führen Siegitmergetool--tool-helpaus, um die Liste der gültigen <tool>-Einstellungen anzuzeigen.Wenn kein Merge-Auflösungsprogramm angegeben ist, verwendet
gitmergetooldie Konfigurationsvariablemerge.tool. Wenn die Konfigurationsvariablemerge.toolnicht gesetzt ist, wähltgitmergetooleinen geeigneten Standardwert.Sie können einen vollständigen Pfad zum Tool explizit angeben, indem Sie die Konfigurationsvariable
mergetool.<tool>.pathsetzen. Zum Beispiel können Sie den absoluten Pfad zu kdiff3 konfigurieren, indem Siemergetool.kdiff3.pathsetzen. Andernfalls gehtgitmergetooldavon aus, dass das Tool in$PATHverfügbar ist.Anstatt eines der bekannten Merge-Tool-Programme auszuführen, kann
gitmergetoolso angepasst werden, dass ein alternatives Programm ausgeführt wird, indem die aufzurufende Befehlszeile in der Konfigurationsvariablemergetool.<tool>.cmdangegeben wird.Wenn
gitmergetoolmit diesem Tool aufgerufen wird (entweder über die Option-toder--tooloder die Konfigurationsvariablemerge.tool), wird die konfigurierte Befehlszeile mitBASEauf den Namen einer temporären Datei gesetzt, die die gemeinsame Basis für den Merge enthält, falls vorhanden;LOCALwird auf den Namen einer temporären Datei gesetzt, die den Inhalt der Datei im aktuellen Branch enthält;REMOTEwird auf den Namen einer temporären Datei gesetzt, die den Inhalt der zu mergenden Datei enthält, undMERGEDwird auf den Namen der Datei gesetzt, in die das Merge-Tool das Ergebnis der Merge-Auflösung schreiben soll.Wenn das benutzerdefinierte Merge-Tool den Erfolg einer Merge-Auflösung korrekt mit seinem Exit-Code anzeigt, kann die Konfigurationsvariable
mergetool.<tool>.trustExitCodeauftruegesetzt werden. Andernfalls wirdgitmergetoolden Benutzer auffordern, den Erfolg der Auflösung nach dem Beenden des benutzerdefinierten Tools anzuzeigen. --tool-help-
Zeigt eine Liste der Merge-Tools an, die mit
--toolverwendet werden können. -y--no-prompt-
Fordert nicht vor jeder Ausführung des Merge-Auflösungsprogramms zur Bestätigung auf. Dies ist der Standard, wenn das Merge-Auflösungsprogramm explizit mit der Option
--tooloder mit der Konfigurationsvariablemerge.toolangegeben wird. --prompt-
Fordert vor jeder Ausführung des Merge-Auflösungsprogramms zur Bestätigung auf, um dem Benutzer die Möglichkeit zu geben, den Pfad zu überspringen.
-g--gui-
Wenn
git-mergetoolmit der Option-goder--guiaufgerufen wird, wird das Standard-Merge-Tool aus der konfigurierten Variablenmerge.guitoolanstelle vonmerge.toolgelesen. Wennmerge.guitoolnicht gesetzt ist, wird auf das untermerge.toolkonfigurierte Tool zurückgegriffen. Dies kann über die Konfigurationsvariablemergetool.guiDefaultautomatisch ausgewählt werden. --no-gui-
Dies überschreibt eine vorherige Einstellung von
-goder--guioder die Konfigurationmergetool.guiDefaultund liest das Standard-Merge-Tool aus der konfigurierten Variablenmerge.tool. -O<orderfile>-
Verarbeitet Dateien in der im <orderfile> angegebenen Reihenfolge, die eine Shell-Glob-Muster pro Zeile enthält. Dies überschreibt die Konfigurationsvariable
diff.orderFile(siehe git-config[1]). Umdiff.orderFileabzubrechen, verwenden Sie-O/dev/null.
KONFIGURATION
Alles unterhalb dieser Zeile in diesem Abschnitt wird selektiv aus der git-config[1]-Dokumentation übernommen. Der Inhalt ist derselbe wie dort zu finden.
mergetool.<tool>.path-
Überschreibt den Pfad für das angegebene Tool. Dies ist nützlich, falls Ihr Tool nicht in
$PATHist. mergetool.<tool>.cmd-
Gibt den auszuführenden Befehl für das angegebene Merge-Tool an. Der angegebene Befehl wird in der Shell mit den folgenden verfügbaren Variablen ausgewertet:
BASEist der Name einer temporären Datei, die die gemeinsame Basis der zu mergenden Dateien enthält, falls vorhanden;LOCAList der Name einer temporären Datei, die den Inhalt der Datei im aktuellen Branch enthält;REMOTEist der Name einer temporären Datei, die den Inhalt der Datei aus dem zu mergenden Branch enthält;MERGEDenthält den Namen der Datei, in die das Merge-Tool die Ergebnisse eines erfolgreichen Merges schreiben soll. mergetool.<tool>.hideResolved-
Ermöglicht dem Benutzer, den globalen Wert
mergetool.hideResolvedfür ein bestimmtes Tool zu überschreiben. Die vollständige Beschreibung finden Sie untermergetool.hideResolved. mergetool.<tool>.trustExitCode-
Gibt für einen benutzerdefinierten Merge-Befehl an, ob der Exit-Code des Merge-Befehls verwendet werden kann, um festzustellen, ob der Merge erfolgreich war. Wenn dies nicht auf true gesetzt ist, wird der Zeitstempel der Merge-Ziel-Datei überprüft, und der Merge wird als erfolgreich angenommen, wenn die Datei aktualisiert wurde; andernfalls wird der Benutzer aufgefordert, den Erfolg des Merges anzuzeigen.
mergetool.meld.hasOutput-
Ältere Versionen von
meldunterstützen die Option--outputnicht. Git versucht zu erkennen, obmeld--outputunterstützt, indem die Ausgabe vonmeld--helpanalysiert wird. Die Konfiguration vonmergetool.meld.hasOutputbewirkt, dass Git diese Prüfungen überspringt und stattdessen den konfigurierten Wert verwendet. Das Setzen vonmergetool.meld.hasOutputauftrueweist Git an, die Option--outputbedingungslos zu verwenden, undfalsevermeidet die Verwendung von--output. mergetool.meld.useAutoMerge-
Wenn
--auto-mergeangegeben wird, führt meld automatisch alle nicht-konfliktierenden Teile zusammen, hebt die konfliktierenden Teile hervor und wartet auf die Entscheidung des Benutzers. Das Setzen vonmergetool.meld.useAutoMergeauftrueweist Git an, die Option--auto-mergemitmeldbedingungslos zu verwenden. Ein Wert vonautolässt Git erkennen, ob--auto-mergeunterstützt wird, und verwendet--auto-mergenur, wenn es verfügbar ist. Ein Wert vonfalsevermeidet die Verwendung von--auto-mergevollständig und ist der Standardwert. mergetool.<variant>.layout-
Konfiguriert das Layout des geteilten Fensters für die <variant> von vimdiff, welche
vimdiff,nvimdiffodergvimdiffsein kann. Beim Starten vongitmergetoolmit--tool=<variant> (oder ohne--tool, wennmerge.toolals <variant> konfiguriert ist) konsultiert Gitmergetool.<variant>.layout, um das Layout des Tools zu bestimmen. Wenn die variantenspezifische Konfiguration nicht verfügbar ist, wirdvimdiff's als Fallback verwendet. Wenn auch das nicht verfügbar ist, wird ein Standardlayout mit 4 Fenstern verwendet. Informationen zur Konfiguration des Layouts finden Sie im Abschnitt HINWEISE ZU BACKEND-SPEZIFISCHEN FUNKTIONEN. mergetool.hideResolved-
Während eines Merges löst Git automatisch so viele Konflikte wie möglich und schreibt die Datei
$MERGED, die Konfliktmarker um alle Konflikte enthält, die es nicht lösen kann;$LOCALund$REMOTEsind normalerweise die Versionen der Datei von vor der Konfliktlösung durch Git. Dieses Flag bewirkt, dass$LOCALund$REMOTEüberschrieben werden, sodass nur die ungelösten Konflikte dem Merge-Tool präsentiert werden. Kann pro Tool über die Konfigurationsvariablemergetool.<tool>.hideResolvedkonfiguriert werden. Standardwert istfalse. mergetool.keepBackup-
Nachdem ein Merge durchgeführt wurde, kann die Originaldatei mit Konfliktmarkern als Datei mit der Erweiterung
.origgespeichert werden. Wenn diese Variable auffalsegesetzt ist, wird diese Datei nicht beibehalten. Standardwert isttrue(d. h. die Backup-Dateien behalten). mergetool.keepTemporaries-
Beim Aufruf eines benutzerdefinierten Merge-Tools verwendet Git eine Reihe von temporären Dateien, die dem Tool übergeben werden. Wenn das Tool einen Fehler zurückgibt und diese Variable auf
truegesetzt ist, werden diese temporären Dateien beibehalten; andernfalls werden sie nach dem Beenden des Tools entfernt. Standardwert istfalse. mergetool.writeToTemp-
Git schreibt standardmäßig temporäre Versionen der Dateien
BASE,LOCALundREMOTEim Arbeitsverzeichnis. Wenn diese Einstellung auftruegesetzt ist, versucht Git, ein temporäres Verzeichnis für diese Dateien zu verwenden. Standardwert istfalse. mergetool.prompt-
Fordert vor jeder Ausführung des Merge-Auflösungsprogramms zur Bestätigung auf.
mergetool.guiDefault-
Setzen Sie auf
true, um standardmäßigmerge.guitoolzu verwenden (entspricht der Angabe des Arguments--gui), oder aufauto, ummerge.guitoolodermerge.toolbasierend auf dem Vorhandensein einerDISPLAY-Umgebungsvariablen auszuwählen. Der Standardwert istfalse, bei dem das Argument--guiexplizit angegeben werden muss, damitmerge.guitoolverwendet wird.
TEMPORÄRE DATEIEN
git mergetool erstellt während der Auflösung von Merges *.orig-Backup-Dateien. Diese können sicher entfernt werden, sobald eine Datei gemergt wurde und ihre git mergetool-Sitzung abgeschlossen ist.
Das Setzen der Konfigurationsvariable mergetool.keepBackup auf false bewirkt, dass git mergetool die Backup-Dateien automatisch entfernt, wenn Dateien erfolgreich gemergt wurden.
HINWEISE ZU BACKEND-SPEZIFISCHEN FUNKTIONEN
vimdiff
Beschreibung
Wenn --tool=vimdiff in git mergetool angegeben wird, öffnet Git Vim mit einem 4-Fenster-Layout, das wie folgt verteilt ist:
------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
LOCAL, BASE und REMOTE sind schreibgeschützte Puffer, die den Inhalt der konfliktierenden Datei in bestimmten Commits anzeigen ("Commit, in den Sie mergen", "gemeinsamer Vorfahren-Commit" und "Commit, von dem Sie mergen" jeweils).
MERGED ist ein beschreibbarer Puffer, in dem Sie die Konflikte lösen müssen (unter Verwendung der anderen schreibgeschützten Puffer als Referenz). Sobald Sie fertig sind, speichern und beenden Sie Vim wie gewohnt (:wq) oder, wenn Sie abbrechen möchten, beenden Sie mit :cq.
Layout-Konfiguration
Sie können das von Vim verwendete Fensterlayout ändern, indem Sie die Konfigurationsvariable mergetool.vimdiff.layout setzen, die einen String akzeptiert, in dem die folgenden Trennzeichen eine besondere Bedeutung haben:
-
+wird verwendet, um "einen neuen Tab zu öffnen" -
,wird verwendet, um "einen neuen vertikalen Split zu öffnen" -
/wird verwendet, um "einen neuen horizontalen Split zu öffnen" -
@wird verwendet, um die Datei anzugeben, die die endgültige Version nach der Lösung der Konflikte enthält. Wenn nicht vorhanden, wird standardmäßigMERGEDverwendet.
Die Priorität der Operatoren ist wie folgt (Sie können Klammern verwenden, um sie zu ändern)
`@` > `+` > `/` > `,`
Sehen wir uns einige Beispiele an, um zu verstehen, wie es funktioniert
-
layout="(LOCAL,BASE,REMOTE)/MERGED"Dies ist genau dasselbe wie das Standardlayout, das wir bereits gesehen haben.
Beachten Sie, dass
/Vorrang vor,hat und daher die Klammern in diesem Fall nicht benötigt werden. Die folgende Layoutdefinition ist äquivalent:layout = "LOCAL,BASE,REMOTE / MERGED"
-
layout="LOCAL,MERGED,REMOTE"Wenn wir aus irgendeinem Grund nicht an dem
BASE-Puffer interessiert sind.------------------------------------------ | | | | | | | | | LOCAL | MERGED | REMOTE | | | | | | | | | ------------------------------------------
-
layout="MERGED"Nur der
MERGED-Puffer wird angezeigt. Beachten Sie jedoch, dass alle anderen Puffer immer noch in Vim geladen sind und Sie mit dem Befehl "buffers" darauf zugreifen können.------------------------------------------ | | | | | MERGED | | | | | ------------------------------------------
-
layout="@LOCAL,REMOTE"Wenn
MERGEDnicht im Layout vorhanden ist, müssen Sie einen der Puffer mit einem Arobase (@) "markieren". Dies wird der Puffer sein, den Sie bearbeiten und speichern müssen, nachdem Sie die Konflikte gelöst haben.------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------
-
layout="LOCAL,BASE,REMOTE/MERGED+BASE,LOCAL+BASE,REMOTE"Drei Tabs werden geöffnet: Der erste ist eine Kopie des Standardlayouts, während die beiden anderen nur die Unterschiede zwischen (
BASEundLOCAL) und (BASEundREMOTE) anzeigen.------------------------------------------ | <TAB #1> | TAB #2 | TAB #3 | | ------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
------------------------------------------ | TAB #1 | <TAB #2> | TAB #3 | | ------------------------------------------ | | | | | | | | | | BASE | LOCAL | | | | | | | | | | ------------------------------------------
------------------------------------------ | TAB #1 | TAB #2 | <TAB #3> | | ------------------------------------------ | | | | | | | | | | BASE | REMOTE | | | | | | | | | | ------------------------------------------
-
layout="LOCAL,BASE,REMOTE/MERGED+BASE,LOCAL+BASE,REMOTE+(LOCAL/BASE/REMOTE),MERGED"Wie im vorherigen Beispiel, fügt jedoch einen vierten Tab mit denselben Informationen wie im ersten Tab hinzu, jedoch mit einem anderen Layout.
--------------------------------------------- | TAB #1 | TAB #2 | TAB #3 | <TAB #4> | --------------------------------------------- | LOCAL | | |---------------------| | | BASE | MERGED | |---------------------| | | REMOTE | | ---------------------------------------------
Beachten Sie, wie wir im dritten Tab-Definitionsblock Klammern verwenden müssen, damit
,Vorrang vor/hat.
Varianten
Anstelle von --tool=vimdiff können Sie auch eine der folgenden Varianten verwenden:
-
--tool=gvimdiff, um gVim anstelle von Vim zu öffnen. -
--tool=nvimdiff, um Neovim anstelle von Vim zu öffnen.
Bei Verwendung dieser Varianten müssen Sie zur Angabe eines benutzerdefinierten Layouts die Konfigurationsvariablen mergetool.gvimdiff.layout und mergetool.nvimdiff.layout anstelle von mergetool.vimdiff.layout setzen (wobei letztere als Fallback verwendet wird, wenn die variantenspezifische nicht gesetzt ist).
Zusätzlich können Sie für die Abwärtskompatibilität mit früheren Git-Versionen 1, 2 oder 3 an entweder vimdiff oder eine der Varianten anhängen (z. B. vimdiff3, nvimdiff1 usw.), um ein vordefiniertes Layout zu verwenden. Mit anderen Worten, die Verwendung von --tool=[g|n]vimdiff<x> ist dasselbe wie die Verwendung von --tool=[g|n]vimdiff und das Setzen der Konfigurationsvariable mergetool.[g|n]vimdiff.layout auf…
-
<x>
=1:"@LOCAL,REMOTE" -
<x>
=2:"LOCAL,MERGED,REMOTE" -
<x>
=3:"MERGED"
Beispiel: Die Verwendung von --tool=gvimdiff2 öffnet gvim mit drei Spalten (LOCAL, MERGED und REMOTE).
GIT
Teil der git[1] Suite