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.1 → 2.51.2 keine Änderungen
-
2.51.0
2025-08-18
- 2.50.1 keine Änderungen
-
2.50.0
2025-06-16
- 2.49.1 keine Änderungen
-
2.49.0
2025-03-14
- 2.46.2 → 2.48.2 keine Änderungen
-
2.46.1
2024-09-13
- 2.45.1 → 2.46.0 keine Änderungen
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.4 keine Änderungen
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 keine Änderungen
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 keine Änderungen
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 keine Änderungen
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 keine Änderungen
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 keine Änderungen
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 keine Änderungen
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 keine Änderungen
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 keine Änderungen
-
2.27.0
2020-06-01
- 2.25.2 → 2.26.3 keine Änderungen
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 keine Änderungen
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 keine Änderungen
-
2.23.0
2019-08-16
- 2.21.1 → 2.22.5 keine Änderungen
-
2.21.0
2019-02-24
- 2.17.0 → 2.20.5 keine Änderungen
-
2.16.6
2019-12-06
- 2.14.6 → 2.15.4 keine Änderungen
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.8.6 keine Änderungen
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.5.6 keine Änderungen
-
2.4.12
2017-05-05
- 2.3.10 keine Änderungen
-
2.2.3
2015-09-04
- 2.1.4 keine Änderungen
-
2.0.5
2014-12-17
SYNOPSIS
gitcommit[-a|--interactive|--patch] [-s] [-v] [-u[<mode>]] [--amend] [--dry-run] <commit>_ |--fixup[(amend|reword):"><commit>] [-F<file> |-m<msg>] [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>] [--[no-]status] [-i|-o] [--pathspec-from-file=<file> [--pathspec-file-nul]] [(--trailer<token>[(=|:)<value>])…] [-S[<keyid>]] [--] [<pathspec>…]
BESCHREIBUNG
Erstellt einen neuen Commit, der den aktuellen Inhalt des Index und die angegebene Log-Nachricht zur Beschreibung der Änderungen enthält. Der neue Commit ist ein direktes Kind von HEAD, normalerweise die Spitze des aktuellen Branches, und der Branch wird aktualisiert, um darauf zu zeigen (es sei denn, es ist kein Branch mit dem Arbeitsverzeichnis verbunden, in diesem Fall wird HEAD wie in git-checkout[1] beschrieben, "detached".)
Der zu committende Inhalt kann auf verschiedene Weisen angegeben werden
-
durch Verwendung von git-add[1], um Änderungen inkrementell zum Index hinzuzufügen, bevor der Befehl
commitverwendet wird (Hinweis: selbst geänderte Dateien müssen "hinzugefügt" werden); -
durch Verwendung von git-rm[1], um Dateien aus dem Arbeitsverzeichnis und dem Index zu entfernen, ebenfalls bevor der Befehl
commitverwendet wird; -
durch Auflistung von Dateien als Argumente für den Befehl
commit(ohne die Schalter--interactiveoder--patch), in diesem Fall ignoriert der Commit Änderungen, die im Index vorbereitet wurden, und zeichnet stattdessen den aktuellen Inhalt der aufgelisteten Dateien auf (die bereits Git bekannt sein müssen); -
durch Verwendung des Schalters
-amit dem Befehlcommit, um automatisch Änderungen von allen bekannten Dateien ("hinzuzufügen") und Dateien im Index, die aus dem Arbeitsverzeichnis entfernt wurden ("rm"), zu behandeln und dann den eigentlichen Commit durchzuführen; -
durch Verwendung der Schalter
--interactiveoder--patchmit dem Befehlcommit, um einzeln zu entscheiden, welche Dateien oder Hunks zusätzlich zum Inhalt im Index Teil des Commits sein sollen, bevor die Operation abgeschlossen wird. Siehe den Abschnitt "Interaktiver Modus" in git-add[1], um zu lernen, wie diese Modi bedient werden.
Die Option --dry-run kann verwendet werden, um eine Zusammenfassung dessen zu erhalten, was von einer der oben genannten Optionen für den nächsten Commit enthalten ist, indem dieselbe Menge von Parametern (Optionen und Pfade) angegeben wird.
Wenn Sie einen Commit machen und kurz danach einen Fehler feststellen, können Sie ihn mit git reset beheben.
OPTIONEN
-a--all-
Fügt automatisch geänderte und gelöschte Dateien zum Staging-Bereich hinzu, neue Dateien, die Git noch nicht bekannt sind, sind davon nicht betroffen.
-p--patch-
Verwendet die interaktive Patch-Auswahlschnittstelle, um auszuwählen, welche Änderungen committet werden sollen. Siehe git-add[1] für Details.
-U<n>--unified=<n>-
Generiert Diffs mit <n> Zeilen Kontext. Standard ist
diff.contextoder 3, wenn die Konfigurationsoption nicht gesetzt ist. --inter-hunk-context=<n>-
Zeigt den Kontext zwischen Diff-Hunks bis zur angegebenen Anzahl von <n> Zeilen an und fasst so nahe beieinander liegende Hunks zusammen. Standard ist
diff.interHunkContextoder 0, wenn die Konfigurationsoption nicht gesetzt ist. -C<commit>--reuse-message=<commit>-
Nimmt ein vorhandenes <commit> Objekt und verwendet die Log-Nachricht und die Autoreninformationen (einschließlich des Zeitstempels) bei der Erstellung des Commits wieder.
-c<commit>--reedit-message=<commit>-
Ähnlich wie
-C, aber mit-cwird der Editor aufgerufen, damit der Benutzer die Commit-Nachricht weiter bearbeiten kann. --fixup=[(amend|reword):]<commit>-
Erstellt einen neuen Commit, der <commit> "fixup"-t, wenn er mit
gitrebase--autosquashangewendet wird. Ein einfacher--fixup=<commit> erstellt einen "fixup!"-Commit, der den Inhalt von <commit> ändert, aber dessen Log-Nachricht unverändert lässt.--fixup=amend:<commit> ist ähnlich, erstellt aber einen "amend!"-Commit, der auch die Log-Nachricht von <commit> durch die Log-Nachricht des "amend!"-Commits ersetzt.--fixup=reword:<commit> erstellt einen "amend!"-Commit, der die Log-Nachricht von <commit> durch seine eigene Log-Nachricht ersetzt, aber keine Änderungen am Inhalt von <commit> vornimmt.Der durch einfachen
--fixup=<commit> erstellte Commit hat einen Titel, der aus "fixup!" gefolgt vom Titel von <commit> besteht und vongitrebase--autosquashspeziell erkannt wird. Die Option-mkann verwendet werden, um die Log-Nachricht des erstellten Commits zu ergänzen, aber die zusätzlichen Kommentare werden verworfen, sobald der "fixup!"-Commit vongitrebase--autosquashin <commit> eingegliedert wird.Der durch
--fixup=amend:<commit> erstellte Commit ist ähnlich, aber sein Titel wird stattdessen mit "amend!" präfixiert. Die Log-Nachricht von <commit> wird in die Log-Nachricht des "amend!"-Commits kopiert und in einem Editor geöffnet, damit sie verfeinert werden kann. Wenngitrebase--autosquashden "amend!"-Commit in <commit> eingliedert, wird die Log-Nachricht von <commit> durch die verfeinerte Log-Nachricht des "amend!"-Commits ersetzt. Es ist ein Fehler, wenn die Log-Nachricht des "amend!"-Commits leer ist, es sei denn,--allow-empty-messagewird angegeben.--fixup=reword:<commit> ist eine Kurzform für--fixup=amend:<commit>--only. Erstellt einen "amend!"-Commit nur mit einer Log-Nachricht (ignoriert alle im Index vorbereiteten Änderungen). Wenn er vongitrebase--autosquasheingegliedert wird, ersetzt er die Log-Nachricht von <commit>, ohne andere Änderungen vorzunehmen.Weder "fixup!"- noch "amend!"-Commits ändern die Autorenschaft von <commit>, wenn sie von
gitrebase--autosquashangewendet werden. Siehe git-rebase[1] für Details. --squash=<commit>-
Erstellt eine Commit-Nachricht zur Verwendung mit
gitrebase--autosquash. Der Titel der Commit-Nachricht wird aus dem angegebenen Commit mit dem Präfix "squash! " übernommen. Kann mit zusätzlichen Commit-Nachrichten-Optionen (-m/-c/-C/-F) verwendet werden. Siehe git-rebase[1] für Details. --reset-author-
Wenn mit den Optionen
-C/-c/--amendverwendet oder nach einem widersprüchlichen Cherry-Pick committet wird, wird erklärt, dass die Autorenschaft des resultierenden Commits nun dem Committer gehört. Dies erneuert auch den Autorenschafts-Zeitstempel. --short-
Bei einem Dry-Run wird die Ausgabe im Kurzformat ausgegeben. Siehe git-status[1] für Details. Impliziert
--dry-run. --branch-
Zeigt den Branch und die Tracking-Informationen auch im Kurzformat an.
--porcelain-
Bei einem Dry-Run wird die Ausgabe in einem für Maschinen lesbaren Format ausgegeben. Siehe git-status[1] für Details. Impliziert
--dry-run. --long-
Bei einem Dry-Run wird die Ausgabe im Langformat ausgegeben. Impliziert
--dry-run. -z--null-
Beim Anzeigen der Ausgabe von
shortoderporcelainwird der Dateiname wörtlich ausgegeben und die Einträge mit NUL statt LF beendet. Wenn kein Format angegeben ist, wird das Ausgabeformat--porcelainimpliziert. Ohne die Option-zwerden Dateinamen mit "ungewöhnlichen" Zeichen wie in der Konfigurationsvariablecore.quotePatherklärt (siehe git-config[1]) zitiert. -F<datei>--file=<datei>-
Nimmt die Commit-Nachricht aus <datei>. Verwenden Sie -, um die Nachricht von der Standardeingabe zu lesen.
--author=<autor>-
Überschreibt den Commit-Autor. Geben Sie einen expliziten Autor im Standardformat A U Thor <autor@example.com> an. Andernfalls wird angenommen, dass <autor> ein Muster ist und zum Suchen nach einem bestehenden Commit dieses Autors verwendet wird (d.h.
gitrev-list--all-i--author=<autor>); der Commit-Autor wird dann vom ersten gefundenen solchen Commit kopiert. --date=<datum>-
Überschreibt das Datum des Autors, das im Commit verwendet wird.
-m<nachricht>--message=<nachricht>-
Verwendet <nachricht> als Commit-Nachricht. Wenn mehrere Optionen
-mangegeben werden, werden ihre Werte als separate Absätze verkettet.Die Option
-mist exklusiv mit-c,-Cund-F. -t<datei>--template=<datei>-
Beim Bearbeiten der Commit-Nachricht wird der Editor mit dem Inhalt aus <datei> gestartet. Die Konfigurationsvariable
commit.templatewird oft verwendet, um diese Option implizit an den Befehl zu übergeben. Dieser Mechanismus kann von Projekten verwendet werden, die Teilnehmer mit Hinweisen leiten möchten, was in der Nachricht in welcher Reihenfolge geschrieben werden soll. Wenn der Benutzer den Editor beendet, ohne die Nachricht zu bearbeiten, wird der Commit abgebrochen. Dies hat keine Auswirkung, wenn die Nachricht auf andere Weise angegeben wird, z.B. mit den Optionen-moder-F. -s--signoff--no-signoff-
Fügt einen
Signed-off-by-Trailer vom Committer am Ende der Commit-Log-Nachricht hinzu. Die Bedeutung eines Sign-offs hängt vom Projekt ab, an das Sie committen. Es kann beispielsweise bestätigen, dass der Committer die Rechte hat, die Arbeit unter der Lizenz des Projekts einzureichen, oder einer bestimmten Beitragsstellervereinbarung zustimmt, wie z. B. einem Developer Certificate of Origin. (Siehe https://developercertificate.org für das von den Linux-Kernel- und Git-Projekten verwendete.) Konsultieren Sie die Dokumentation oder die Führung des Projekts, zu dem Sie beitragen, um zu verstehen, wie die Sign-offs in diesem Projekt verwendet werden.Die Option
--no-signoffkann verwendet werden, um eine frühere Option--signoffauf der Kommandozeile zu widerrufen. --trailer<token>[(=|:)<wert>]-
Gibt ein (<token>, <wert>)-Paar an, das als Trailer angewendet werden soll. (z.B. git commit --trailer "Signed-off-by:C O Mitter \ <committer@example.com>" --trailer "Helped-by:C O Mitter \ <committer@example.com>" fügt den
Signed-off-by-Trailer und denHelped-by-Trailer zur Commit-Nachricht hinzu.) Die Konfigurationsvariablentrailer.*(siehe git-interpret-trailers[1]) können verwendet werden, um zu definieren, ob ein duplizierter Trailer weggelassen wird, wo in der Reihe der Trailer jeder Trailer erscheinen würde und andere Details. -n--verify--no-verify-
Umgeht die
pre-commitundcommit-msgHooks. Siehe auch githooks[5]. --allow-empty-
Normalerweise ist das Aufzeichnen eines Commits, der denselben Baum wie sein einziger Eltern-Commit hat, ein Fehler, und der Befehl verhindert, dass Sie einen solchen Commit machen. Diese Option umgeht die Sicherheitsvorkehrung und ist hauptsächlich für die Verwendung durch Skripte von Fremd-SCM-Schnittstellen bestimmt.
--allow-empty-message-
Erstellt einen Commit mit einer leeren Commit-Nachricht, ohne dabei niedrigstufige Befehle wie git-commit-tree[1] zu verwenden. Wie
--allow-emptyist dieser Befehl hauptsächlich für die Verwendung durch Skripte von Fremd-SCM-Schnittstellen bestimmt. --cleanup=<modus>-
Bestimmt, wie die übermittelte Commit-Nachricht vor dem Committen bereinigt werden soll. Der <modus> kann
strip,whitespace,verbatim,scissorsoderdefaultsein.strip-
Entfernt führende und nachfolgende leere Zeilen, nachfolgende Leerzeichen, Kommentare und komprimiert aufeinanderfolgende leere Zeilen.
whitespace-
Wie
strip, mit der Ausnahme, dass #Kommentare nicht entfernt werden. verbatim-
Die Nachricht wird überhaupt nicht verändert.
scissors-
Wie
whitespace, mit der Ausnahme, dass alles ab (und einschließlich) der unten gefundenen Zeile abgeschnitten wird, falls die Nachricht bearbeitet werden soll. "#" kann mitcore.commentCharangepasst werden.# ------------------------ >8 ------------------------
default-
Wie
strip, wenn die Nachricht bearbeitet werden soll. Andernfallswhitespace.
Der Standard kann durch die Konfigurationsvariable
commit.cleanupgeändert werden (siehe git-config[1]). -e--edit-
Lässt den Benutzer die Nachricht, die aus <datei> mit
-F<datei>, von der Befehlszeile mit-m<nachricht> und aus <commit> mit-C<commit> übernommen wurde, weiter bearbeiten. --no-edit-
Verwendet die ausgewählte Commit-Nachricht, ohne einen Editor zu starten. Zum Beispiel,
gitcommit--amend--no-editändert einen Commit, ohne seine Commit-Nachricht zu ändern. --amend-
Ersetzt die Spitze des aktuellen Branches durch einen neuen Commit. Der aufgezeichnete Baum wird wie üblich vorbereitet (einschließlich der Auswirkungen der Optionen
-iund-osowie expliziter Pfadangaben) und die Nachricht des ursprünglichen Commits wird als Ausgangspunkt verwendet, anstatt einer leeren Nachricht, wenn keine andere Nachricht über Befehlszeilenoptionen wie-m,-F,-cusw. angegeben wird. Der neue Commit hat dieselben Eltern und denselben Autor wie der aktuelle (die Option--reset-authorkann dies überschreiben).Dies ist eine grobe Entsprechung für
$ git reset --soft HEAD^ $ ... do something else to come up with the right tree ... $ git commit -c ORIG_HEAD
kann aber verwendet werden, um einen Merge-Commit zu ändern.
Sie sollten die Auswirkungen des Umschreibens der Historie verstehen, wenn Sie einen Commit ändern, der bereits veröffentlicht wurde. (Siehe den Abschnitt "RECOVERING FROM UPSTREAM REBASE" in git-rebase[1].)
--no-post-rewrite-
Umgeht den
post-rewriteHook. -i--include-
Bevor ein Commit aus den bisher vorbereiteten Inhalten erstellt wird, werden auch die Inhalte der auf der Befehlszeile angegebenen Pfade vorbereitet. Dies ist normalerweise nicht das, was Sie wollen, es sei denn, Sie beenden einen konfliktträchtigen Merge.
-o--only-
Erstellt einen Commit, indem die aktualisierten Arbeitsverzeichnis-Inhalte der auf der Befehlszeile angegebenen Pfade übernommen werden, wobei alle für andere Pfade vorbereiteten Inhalte ignoriert werden. Dies ist der Standardmodus von
gitcommit, wenn Pfade auf der Befehlszeile angegeben werden, in diesem Fall kann diese Option weggelassen werden. Wenn diese Option zusammen mit--amendangegeben wird, müssen keine Pfade angegeben werden, was verwendet werden kann, um den letzten Commit zu ändern, ohne bereits vorbereitete Änderungen zu committen. Wenn zusammen mit--allow-emptyverwendet, werden auch keine Pfade benötigt und ein leerer Commit wird erstellt. --pathspec-from-file=<datei>-
Gibt die Pfadangaben in <datei> anstelle von Befehlszeilenargumenten weiter. Wenn <datei> genau
-ist, wird die Standardeingabe verwendet. Pfadangaben werden durch LF oder CR/LF getrennt. Pfadangaben können wie für die Konfigurationsvariablecore.quotePathbeschrieben (siehe git-config[1]) zitiert werden. Siehe auch--pathspec-file-nulund global--literal-pathspecs. --pathspec-file-nul-
Nur relevant mit
--pathspec-from-file. Pfadangaben werden durch ein NUL-Zeichen getrennt und alle anderen Zeichen werden wörtlich genommen (einschließlich Zeilenumbrüchen und Anführungszeichen). -u[<modus>]--untracked-files[=<modus>]-
Zeigt nicht verfolgte Dateien an.
Der Parameter <modus> ist optional (standardmäßig
all) und wird zur Spezifizierung der Handhabung nicht verfolgter Dateien verwendet; wenn-unicht verwendet wird, ist der Standardnormal, d.h. nicht verfolgte Dateien und Verzeichnisse werden angezeigt.Die möglichen Optionen sind
Alle üblichen Schreibweisen für den booleschen Wert
truewerden alsnormalundfalsealsnointerpretiert. Der Standardwert kann mit der Konfigurationsvariablestatus.showUntrackedFilesgeändert werden, die in git-config[1] dokumentiert ist. -v--verbose-
Zeigt am Ende der Commit-Nachrichtenvorlage eine einheitliche Differenz zwischen dem
HEAD-Commit und dem, was committet werden würde, an, um dem Benutzer zu helfen, den Commit zu beschreiben, indem er ihn an die vorgenommenen Änderungen erinnert. Beachten Sie, dass diese Diff-Ausgabe nicht mit#-Zeilenpräfixen versehen ist. Diese Diff ist nicht Teil der Commit-Nachricht. Siehe die Konfigurationsvariablecommit.verbosein git-config[1].Wenn zweimal angegeben, wird zusätzlich die einheitliche Differenz zwischen dem, was committet werden würde, und den Arbeitsverzeichnisdateien angezeigt, d.h. die nicht vorbereiteten Änderungen an verfolgten Dateien.
-q--quiet-
Unterdrückt die Commit-Zusammenfassungsnachricht.
--dry-run-
Erstellt keinen Commit, sondern zeigt eine Liste der zu committenden Pfade, Pfade mit lokalen Änderungen, die nicht committet werden, und nicht verfolgte Pfade an.
--status-
Schließt die Ausgabe von git-status[1] in die Commit-Nachrichtenvorlage ein, wenn ein Editor zur Vorbereitung der Commit-Nachricht verwendet wird. Standardmäßig aktiviert, kann aber die Konfigurationsvariable
commit.statusüberschreiben. --no-status-
Schließt die Ausgabe von git-status[1] nicht in die Commit-Nachrichtenvorlage ein, wenn ein Editor zur Vorbereitung der Standard-Commit-Nachricht verwendet wird.
-S[<key-id>]--gpg-sign[=<key-id>]--no-gpg-sign-
GPG-signiert Commits. Die Angabe von <key-id> ist optional und wird standardmäßig auf die Identität des Committenten gesetzt; wenn sie angegeben wird, muss sie ohne Leerzeichen an die Option angehängt werden.
--no-gpg-signist nützlich, um sowohl die Konfigurationsvariablecommit.gpgSignals auch frühere--gpg-sign-Angaben zu überschreiben. ---
Interpretiere keine weiteren Argumente mehr als Optionen.
- <pfadangabe>...
-
Wenn <pfadangabe> auf der Befehlszeile angegeben wird, werden die Inhalte der Dateien, die mit der Pfadangabe übereinstimmen, committet, ohne die Änderungen aufzuzeichnen, die bereits zum Index hinzugefügt wurden. Die Inhalte dieser Dateien werden auch für den nächsten Commit über das hinaus, was zuvor vorbereitet wurde, vorbereitet.
Weitere Details finden Sie im Eintrag pfadspec in gitglossary[7].
BEISPIELE
Wenn Sie Ihre eigene Arbeit aufzeichnen, werden die Inhalte von geänderten Dateien in Ihrem Arbeitsverzeichnis mit git add temporär in einen Staging-Bereich namens "Index" gespeichert. Eine Datei kann im Index, aber nicht im Arbeitsverzeichnis, wieder auf den Stand des letzten Commits zurückgesetzt werden mit git restore --staged <datei>, was effektiv git add rückgängig macht und verhindert, dass die Änderungen dieser Datei am nächsten Commit teilnehmen. Nachdem der zu committende Zustand inkrementell mit diesen Befehlen aufgebaut wurde, wird git commit (ohne Parameter für den Pfadnamen) verwendet, um das bisher vorbereitete aufzuzeichnen. Dies ist die grundlegendste Form des Befehls. Ein Beispiel
$ edit hello.c $ git rm goodbye.c $ git add hello.c $ git commit
Anstatt Dateien nach jeder einzelnen Änderung vorzubereiten, können Sie git commit anweisen, die Änderungen an den Dateien zu bemerken, deren Inhalte in Ihrem Arbeitsverzeichnis verfolgt werden, und entsprechende git add- und git rm-Befehle für Sie auszuführen. Das heißt, dieses Beispiel macht dasselbe wie das vorherige Beispiel, wenn keine anderen Änderungen in Ihrem Arbeitsverzeichnis vorhanden sind
$ edit hello.c $ rm goodbye.c $ git commit -a
Der Befehl git commit -a prüft zuerst Ihr Arbeitsverzeichnis, stellt fest, dass Sie hello.c geändert und goodbye.c entfernt haben, und führt die notwendigen git add- und git rm-Befehle für Sie aus.
Nachdem Sie Änderungen an vielen Dateien vorbereitet haben, können Sie die Reihenfolge, in der die Änderungen aufgezeichnet werden, ändern, indem Sie Pfadnamen an git commit übergeben. Wenn Pfadnamen angegeben werden, erstellt der Befehl einen Commit, der nur die Änderungen an den angegebenen Pfaden aufzeichnet
$ edit hello.c hello.h $ git add hello.c hello.h $ edit Makefile $ git commit Makefile
Dies erstellt einen Commit, der die Änderung an Makefile aufzeichnet. Die für hello.c und hello.h vorbereiteten Änderungen sind nicht im resultierenden Commit enthalten. Ihre Änderungen gehen jedoch nicht verloren – sie sind immer noch vorbereitet und werden lediglich zurückgehalten. Nach der obigen Sequenz, wenn Sie Folgendes tun:
$ git commit
würde dieser zweite Commit die Änderungen an hello.c und hello.h wie erwartet aufzeichnen.
Nach einem Merge (eingeleitet durch git merge oder git pull), der wegen Konflikten abbricht, werden sauber gemergte Pfade bereits für den Commit vorbereitet, und Pfade, die Konflikte aufweisen, bleiben im ungemergten Zustand. Sie müssten zuerst prüfen, welche Pfade Konflikte aufweisen mit git status und nachdem Sie diese manuell in Ihrem Arbeitsverzeichnis behoben haben, würden Sie das Ergebnis wie gewohnt mit git add vorbereiten.
$ git status | grep unmerged unmerged: hello.c $ edit hello.c $ git add hello.c
Nachdem die Konflikte gelöst und das Ergebnis vorbereitet wurden, würde git ls-files -u aufhören, den konfliktreichen Pfad zu erwähnen. Wenn Sie fertig sind, führen Sie git commit aus, um den Merge endgültig aufzuzeichnen.
$ git commit
Wie beim Aufzeichnen Ihrer eigenen Änderungen können Sie die Option -a verwenden, um Tipparbeit zu sparen. Ein Unterschied ist, dass Sie während einer Merge-Auflösung git commit mit Pfadnamen nicht verwenden können, um die Reihenfolge der aufgezeichneten Änderungen zu ändern, da der Merge als einzelner Commit aufgezeichnet werden sollte. Tatsächlich weigert sich der Befehl, wenn Pfadnamen angegeben werden (aber siehe Option -i).
COMMIT INFORMATION
Autor- und Committerinformationen werden aus den folgenden Umgebungsvariablen übernommen, falls gesetzt
-
GIT_AUTHOR_NAME -
GIT_AUTHOR_EMAIL -
GIT_AUTHOR_DATE -
GIT_COMMITTER_NAME -
GIT_COMMITTER_EMAIL -
GIT_COMMITTER_DATE
(nb "<", ">" und "\n"s werden entfernt)
Die Namen des Autors und des Committers sind konventionell eine Form eines persönlichen Namens (d. h. der Name, mit dem andere Menschen Sie ansprechen), obwohl Git keine bestimmte Form erzwingt oder vorschreibt. Beliebige Unicode-Zeichen können verwendet werden, vorbehaltlich der oben genannten Einschränkungen. Dieser Name hat keine Auswirkungen auf die Authentifizierung; dazu siehe die Variable credential.username in git-config[1].
Falls (einige) dieser Umgebungsvariablen nicht gesetzt sind, werden die Informationen aus den Konfigurationselementen user.name und user.email übernommen, oder falls diese nicht vorhanden sind, aus der Umgebungsvariablen EMAIL, oder falls diese nicht gesetzt ist, aus dem Systembenutzernamen und dem Hostnamen, der für ausgehende E-Mails verwendet wird (entnommen aus /etc/mailname und zurückfallend auf den vollständig qualifizierten Hostnamen, wenn diese Datei nicht existiert).
Die Optionen author.name und committer.name sowie ihre entsprechenden E-Mail-Optionen überschreiben user.name und user.email, falls sie gesetzt sind, und werden selbst von den Umgebungsvariablen überschrieben.
Die typische Verwendung ist, nur die Variablen user.name und user.email zu setzen; die anderen Optionen sind für komplexere Anwendungsfälle vorgesehen.
DATUMSFORMATE
Die Umgebungsvariablen GIT_AUTHOR_DATE und GIT_COMMITTER_DATE unterstützen die folgenden Datumsformate:
- Git-internes Format
-
Es ist <unix-timestamp> <time-zone-offset>, wobei <unix-timestamp> die Anzahl der Sekunden seit der UNIX-Epoche ist. <time-zone-offset> ist ein positiver oder negativer Offset von UTC. Zum Beispiel ist CET (das 1 Stunde vor UTC liegt)
+0100. - RFC 2822
-
Das Standard-Datumsformat wie in RFC 2822 beschrieben, zum Beispiel
Thu,07Apr200522:13:13+0200. - ISO 8601
-
Zeit und Datum gemäß dem ISO 8601-Standard, zum Beispiel
2005-04-07T22:13:13. Der Parser akzeptiert auch ein Leerzeichen anstelle desT-Zeichens. Bruchteile von Sekunden werden ignoriert, zum Beispiel wird2005-04-07T22:13:13.019als2005-04-07T22:13:13behandelt.HinweisZusätzlich werden Datumsangaben in den folgenden Formaten akzeptiert: JJJJ.MM.TT,MM/TT/JJJJundTT.MM.JJJJ.
Zusätzlich zur Erkennung aller oben genannten Datumsformate versucht die Option --date auch, andere, menschenzentriertere Datumsformate zu verstehen, wie z. B. relative Daten wie "gestern" oder "letzten Freitag um die Mittagszeit".
DISKUSSION
Obwohl nicht vorgeschrieben, ist es eine gute Idee, die Commit-Nachricht mit einer einzelnen kurzen Zeile (nicht länger als 50 Zeichen) zu beginnen, die die Änderung zusammenfasst, gefolgt von einer Leerzeile und dann einer ausführlicheren Beschreibung. Der Text bis zur ersten Leerzeile in einer Commit-Nachricht wird als Commit-Titel behandelt, und dieser Titel wird in Git verwendet. Zum Beispiel wandelt git-format-patch[1] einen Commit in eine E-Mail um, und er verwendet den Titel in der Betreffzeile und den Rest des Commits im Körper.
Git ist bis zu einem gewissen Grad zeichenkodierungsunabhängig.
-
Der Inhalt der Blob-Objekte sind uninterpretierte Bytefolgen. Auf Kern-Ebene erfolgt keine Kodierungsumwandlung.
-
Pfadnamen werden in UTF-8 Normalisierungsform C kodiert. Dies gilt für Baum-Objekte, die Indexdatei, Ref-Namen sowie für Pfadnamen in Kommandozeilenargumenten, Umgebungsvariablen und Konfigurationsdateien (
.git/config(siehe git-config[1]), gitignore[5], gitattributes[5] und gitmodules[5]).Beachten Sie, dass Git auf Kern-Ebene Pfadnamen einfach als Folgen von Nicht-NUL-Bytes behandelt, es gibt keine Pfadnamen-Kodierungskonvertierungen (außer unter Mac und Windows). Daher funktionieren nicht-ASCII-Pfadnamen meist auch auf Plattformen und Dateisystemen, die Legacy-Erweiterte-ASCII-Kodierungen verwenden. Repositories, die auf solchen Systemen erstellt wurden, funktionieren jedoch nicht ordnungsgemäß auf UTF-8-basierten Systemen (z. B. Linux, Mac, Windows) und umgekehrt. Zusätzlich gehen viele Git-basierte Werkzeuge einfach davon aus, dass Pfadnamen UTF-8 sind und werden andere Kodierungen nicht korrekt anzeigen.
-
Commit-Log-Nachrichten sind typischerweise in UTF-8 kodiert, aber auch andere erweiterte ASCII-Kodierungen werden unterstützt. Dazu gehören ISO-8859-x, CP125x und viele andere, aber *nicht* UTF-16/32, EBCDIC und CJK-Multibyte-Kodierungen (GBK, Shift-JIS, Big5, EUC-x, CP9xx etc.).
Obwohl wir ermutigen, dass die Commit-Log-Nachrichten in UTF-8 kodiert werden, sind sowohl der Kern als auch Git Porcelain so konzipiert, dass sie Projekten keine UTF-8 aufzwingen. Wenn alle Teilnehmer eines bestimmten Projekts es bequemer finden, Legacy-Kodierungen zu verwenden, verbietet Git dies nicht. Es gibt jedoch ein paar Dinge zu beachten.
-
gitcommitundgitcommit-treegeben eine Warnung aus, wenn die ihnen übergebene Commit-Log-Nachricht keine gültige UTF-8-Zeichenkette zu sein scheint, es sei denn, Sie geben explizit an, dass Ihr Projekt eine Legacy-Kodierung verwendet. Dies geschieht durch Festlegen voni18n.commitEncodingin der Datei.git/config, wie folgt[i18n] commitEncoding = ISO-8859-1
Mit der obigen Einstellung erstellte Commit-Objekte speichern den Wert von
i18n.commitEncodingin ihrerencoding-Kopfzeile. Dies soll anderen Personen helfen, die sie später betrachten. Das Fehlen dieser Kopfzeile impliziert, dass die Commit-Log-Nachricht in UTF-8 kodiert ist. -
gitlog,gitshow,gitblameund Freunde betrachten denencodingHeader eines Commit-Objekts und versuchen, die Log-Nachricht in UTF-8 neu zu kodieren, sofern nicht anders angegeben. Sie können die gewünschte Ausgabe-Kodierung miti18n.logOutputEncodingin der.git/config-Datei angeben, wie folgt:[i18n] logOutputEncoding = ISO-8859-1
Wenn Sie diese Konfigurationsvariable nicht haben, wird stattdessen der Wert von
i18n.commitEncodingverwendet.
Beachten Sie, dass wir uns bewusst entschieden haben, die Commit-Log-Nachricht nicht neu zu kodieren, wenn ein Commit durchgeführt wird, um UTF-8 auf der Ebene des Commit-Objekts zu erzwingen, da die Neukodierung nach UTF-8 nicht unbedingt eine reversible Operation ist.
UMGEBUNGS- UND KONFIGURATIONSVARIABLEN
Der Editor, der zum Bearbeiten der Commit-Log-Nachricht verwendet wird, wird aus der Umgebungsvariable GIT_EDITOR, der Konfigurationsvariable core.editor, der Umgebungsvariable VISUAL oder der Umgebungsvariable EDITOR (in dieser Reihenfolge) ausgewählt. Weitere Details finden Sie in git-var[1].
Alles oberhalb dieser Zeile in diesem Abschnitt ist nicht in der Dokumentation von git-config[1] enthalten. Der nachfolgende Inhalt ist derselbe wie dort zu finden.
commit.cleanup-
Diese Einstellung überschreibt den Standardwert der Option
--cleanupingitcommit. Das Ändern des Standardwerts kann nützlich sein, wenn Sie Zeilen, die mit dem Kommentarzeichen (core.commentChar, Standard#) beginnen, immer in Ihrer Log-Nachricht behalten möchten. In diesem Fall würden Siegitconfigcommit.cleanupwhitespaceausführen (beachten Sie, dass Sie die Hilfzeilen, die mit dem Kommentarzeichen beginnen, in der Commit-Log-Vorlage selbst entfernen müssen, wenn Sie dies tun). commit.gpgSign-
Ein boolescher Wert, der angibt, ob alle Commits GPG-signiert werden sollen. Die Verwendung dieser Option bei Operationen wie Rebase kann dazu führen, dass eine große Anzahl von Commits signiert wird. Es kann praktisch sein, einen Agenten zu verwenden, um die Eingabe Ihrer GPG-Passphrase mehrmals zu vermeiden.
commit.status-
Ein boolescher Wert, um die Einbeziehung von Statusinformationen in die Commit-Nachrichten-Vorlage bei der Verwendung eines Editors zur Vorbereitung der Commit-Nachricht zu aktivieren/deaktivieren. Standardmäßig ist dieser Wert auf
truegesetzt. commit.template-
Gibt den Pfadnamen einer Datei an, die als Vorlage für neue Commit-Nachrichten verwendet werden soll.
commit.verbose-
Ein boolescher Wert oder eine Ganzzahl, um den Grad der Ausführlichkeit bei
gitcommitanzugeben.
HOOKS
Dieser Befehl kann die Hooks commit-msg, prepare-commit-msg, pre-commit, post-commit und post-rewrite ausführen. Weitere Informationen finden Sie in githooks[5].
DATEIEN
$GIT_DIR/COMMIT_EDITMSG-
Diese Datei enthält die Commit-Nachricht eines gerade stattfindenden Commits. Wenn
gitcommitaufgrund eines Fehlers abbricht, bevor ein Commit erstellt wurde, ist jede vom Benutzer bereitgestellte Commit-Nachricht (z. B. in einer Editiersitzung) in dieser Datei verfügbar, wird aber bei der nächsten Ausführung vongitcommitüberschrieben.
GIT
Teil der git[1] Suite