Suche…
Einführung
Commits with Git sorgen für Verantwortlichkeit, indem Autoren mit Änderungen am Code zugeordnet werden. Git bietet mehrere Funktionen für die Spezifität und Sicherheit von Commits. In diesem Thema werden die richtigen Praktiken und Verfahren für das Commit mit Git beschrieben und veranschaulicht.
Syntax
- git commit [Flags]
Parameter
Parameter | Einzelheiten |
---|---|
--message -m | Nachricht, die in das Commit aufgenommen werden soll. Durch die Angabe dieses Parameters wird Gits normales Verhalten beim Öffnen eines Editors umgangen. |
--ändern | Geben Sie an, dass die aktuell durchgeführten Änderungen zum vorherigen Commit hinzugefügt (geändert) werden sollen. Seien Sie vorsichtig, dies kann die Geschichte umschreiben! |
--keine Bearbeitung | Verwenden Sie die ausgewählte Commit-Nachricht, ohne einen Editor zu starten. Zum Beispiel ändert git commit --amend --no-edit ein Commit, ohne seine Commit-Nachricht zu ändern. |
-all, -a | Übernehmen Sie alle Änderungen, einschließlich der noch nicht bereitgestellten Änderungen. |
--Datum | Legen Sie das Datum fest, das dem Commit zugeordnet werden soll. |
--nur | Commit nur die angegebenen Pfade. Dies wird nicht das, was Sie derzeit durchgeführt haben, begehen, wenn Sie nicht dazu aufgefordert werden. |
--patch, -p | Verwenden Sie die interaktive Patch-Auswahloberfläche, um die zu übergebenden Änderungen auszuwählen. |
--Hilfe | Zeigt die Manpage für git commit |
-S [keyid], -S --gpg-sign [= keyid], -S - no-gpg-sign | Sign-Commit, GPG-Sign-Commit, commit.gpgSign Konfigurationsvariable |
-n, --no-verify | Diese Option umgeht die Pre-Commit- und Commit-msg-Hooks. Siehe auch Haken |
Bestätigen ohne einen Editor zu öffnen
Git öffnet normalerweise einen Editor (wie vim
oder emacs
), wenn Sie git commit
ausführen. Übergeben Sie die Option -m
, um eine Nachricht über die Befehlszeile anzugeben:
git commit -m "Commit message here"
Ihre Commit-Nachricht kann mehrere Zeilen umfassen:
git commit -m "Commit 'subject line' message here
More detailed description follows here (after a blank line)."
Alternativ können Sie mehrere -m
Argumente übergeben:
git commit -m "Commit summary" -m "More detailed description follows here"
Siehe So schreiben Sie eine Git-Commit-Nachricht .
Udacity Git Commit Message Style Guide
Änderung eines Commits
Wenn Ihr letztes Commit noch nicht veröffentlicht ist (nicht in ein Upstream-Repository gepusht wird), können Sie Ihr Commit ändern.
git commit --amend
Dadurch werden die aktuell bereitgestellten Änderungen auf den vorherigen Commit angewendet.
Hinweis: Dies kann auch zum Bearbeiten einer falschen Bestätigungsmeldung verwendet werden. Der Standardeditor (normalerweise vi
/ vim
/ emacs
) wird emacs
und Sie können die vorherige Nachricht ändern.
So legen Sie die Festschreibungsnachricht inline fest:
git commit --amend -m "New commit message"
Oder um die vorherige Commit-Nachricht zu verwenden, ohne sie zu ändern:
git commit --amend --no-edit
Durch die Änderung wird das Commit-Datum aktualisiert, das Datum des Autors bleibt jedoch erhalten. Sie können git anweisen, die Informationen zu aktualisieren.
git commit --amend --reset-author
Sie können den Autor des Commits auch ändern mit:
git commit --amend --author "New Author <[email protected]>"
Hinweis: Beachten Sie, dass die Änderung des letzten Commits vollständig ersetzt wird und das vorherige Commit aus dem Verlauf der Zweigstelle entfernt wird. Dies sollte bei der Arbeit mit öffentlichen Repositories und in Niederlassungen mit anderen Mitarbeitern berücksichtigt werden.
Das bedeutet, wenn das frühere Commit bereits gepusht wurde, müssen Sie nach einer Änderung - push --force
.
Änderungen direkt übernehmen
Normalerweise müssen Sie git add
oder git rm
, um Änderungen zum Index hinzuzufügen, bevor Sie sie git commit
können. --all
Option -a
oder --all
, um alle Änderungen (an nachverfolgten Dateien) automatisch zum Index hinzuzufügen, einschließlich Entfernungen:
git commit -a
Wenn Sie auch eine Commit-Nachricht hinzufügen möchten, würden Sie Folgendes tun:
git commit -a -m "your commit message goes here"
Sie können auch zwei Flaggen verbinden:
git commit -am "your commit message goes here"
Sie müssen nicht unbedingt alle Dateien gleichzeitig festschreiben. --all
Flag -a
oder --all
und geben Sie an, welche Datei Sie direkt --all
möchten:
git commit path/to/a/file -m "your commit message goes here"
Um direkt mehr als eine bestimmte Datei zu übergeben, können Sie auch eine oder mehrere Dateien, Verzeichnisse und Muster angeben:
git commit path/to/a/file path/to/a/folder/* path/to/b/file -m "your commit message goes here"
Leeres Commit erstellen
Im Allgemeinen sind leere Commits (oder Commits mit einem Zustand, der mit dem übergeordneten Element identisch ist) ein Fehler.
Beim Testen von Build-Hooks, CI-Systemen und anderen Systemen, die ein Commit auslösen, ist es jedoch praktisch, Commits einfach erstellen zu können, ohne eine Dummy-Datei bearbeiten / berühren zu müssen.
Das --allow-empty
Commit --allow-empty
die Prüfung.
git commit -m "This is a blank commit" --allow-empty
Änderungen vornehmen und festschreiben
Die Grundlagen
Nach Änderungen am Quellcode vornehmen, sollten Sie diese Änderungen mit Git Bühne , bevor Sie sie begehen kann.
Zum Beispiel, wenn Sie ändern README.md
und program.py
:
git add README.md program.py
Dies teilt git mit, dass Sie die Dateien zum nächsten Commit hinzufügen möchten.
Übernehmen Sie anschließend Ihre Änderungen mit
git commit
Beachten Sie, dass dadurch ein Texteditor geöffnet wird, der häufig vim ist . Wenn Sie mit vim nicht vertraut sind, möchten Sie vielleicht wissen, dass Sie i
drücken können, um in den Einfügemodus zu wechseln, Ihre :wq
schreiben und dann Esc
und :wq
, um zu speichern und zu beenden. Um zu vermeiden, dass der Texteditor geöffnet wird, -m
Sie einfach die -m
in Ihre Nachricht ein
git commit -m "Commit message here"
Commit-Nachrichten folgen häufig bestimmten Formatierungsregeln. Weitere Informationen finden Sie unter Good-Commit-Nachrichten .
Tastenkombinationen
Wenn Sie viele Dateien im Verzeichnis geändert haben, anstatt jede einzelne aufzulisten, können Sie Folgendes verwenden:
git add --all # equivalent to "git add -a"
Oder fügen Sie alle Änderungen ( ausgenommen gelöschte Dateien) aus dem Verzeichnis und den Unterverzeichnissen der obersten Ebene hinzu:
git add .
Oder nur Dateien hinzufügen, die aktuell verfolgt werden ("Update"):
git add -u
Falls gewünscht, überprüfen Sie die inszenierten Änderungen:
git status # display a list of changed files
git diff --cached # shows staged changes inside staged files
Bestätigen Sie abschließend die Änderungen:
git commit -m "Commit message here"
Wenn Sie nur vorhandene Dateien geändert oder Dateien gelöscht und keine neuen Dateien erstellt haben, können Sie die Aktionen von git add
und git commit
in einem einzigen Befehl kombinieren:
git commit -am "Commit message here"
Beachten Sie, dass dies alle modifizierten Dateien auf dieselbe Weise wie git add --all
.
Sensible Daten
Sie sollten niemals vertrauliche Daten wie Kennwörter oder sogar private Schlüssel festlegen. Wenn dieser Fall eintritt und die Änderungen bereits an einen zentralen Server übertragen werden, betrachten Sie alle sensiblen Daten als gefährdet. Ansonsten ist es möglich, solche Daten nachträglich zu entfernen. Eine schnelle und einfache Lösung ist die Verwendung des "BFG Repo-Cleaner": https://rtyley.github.io/bfg-repo-cleaner/ .
Der Befehl bfg --replace-text passwords.txt my-repo.git
liest die Passwörter aus der Datei passwords.txt
und ersetzt diese durch ***REMOVED***
. Diese Operation berücksichtigt alle vorherigen Commits des gesamten Repositorys.
Engagement für jemand anderen
Wenn jemand anderes den Code geschrieben hat, den Sie begehen, können Sie ihm mit der Option --author
Gutschrift --author
:
git commit -m "msg" --author "John Smith <[email protected]>"
Sie können auch ein Muster angeben, mit dem Git nach vorherigen Autoren sucht:
git commit -m "msg" --author "John"
In diesem Fall werden die Autoreninformationen aus dem letzten Commit mit einem Autor, der "John" enthält, verwendet.
Auf GitHub zeigen Commits, die auf eine der oben genannten Arten gemacht wurden, die Miniaturansicht eines großen Autors, wobei der Committer kleiner ist und vorne steht:
Änderungen in bestimmten Dateien festlegen
Sie können Änderungen an bestimmten Dateien festschreiben und mit git add
Staging überspringen:
git commit file1.c file2.h
Oder Sie können die Dateien zunächst in Stufe bringen:
git add file1.c file2.h
und begehen sie später:
git commit
Gute Commit-Nachrichten
Für jemanden, der das git log
durchläuft, ist es wichtig, leicht zu verstehen, worum es bei jedem Commit ging. Gute Commit-Nachrichten enthalten normalerweise eine Reihe von Aufgaben oder Problemen in einem Tracker und eine kurze Beschreibung, was und warum getan wurde, und manchmal auch, wie es gemacht wurde.
Bessere Nachrichten können wie folgt aussehen:
TASK-123: Implement login through OAuth
TASK-124: Add auto minification of JS/CSS files
TASK-125: Fix minifier error when name > 200 chars
Die folgenden Meldungen wären jedoch nicht ganz so nützlich:
fix // What has been fixed?
just a bit of a change // What has changed?
TASK-371 // No description at all, reader will need to look at the tracker themselves for an explanation
Implemented IFoo in IBar // Why it was needed?
Um zu testen, ob eine Commit-Nachricht in der richtigen Stimmung geschrieben wurde, können Sie das Leerzeichen durch die Nachricht ersetzen und prüfen, ob es sinnvoll ist:
Wenn ich dieses Commit hinzufüge, werde ich ___ zu meinem Repository.
Die sieben Regeln einer großen Git-Commit-Nachricht
- Trennen Sie die Betreffzeile durch eine Leerzeile vom Hauptteil
- Begrenzen Sie die Betreffzeile auf 50 Zeichen
- Machen Sie die Betreffzeile groß
- Beenden Sie die Betreffzeile nicht mit einem Punkt
- Verwenden Sie die imperative Stimmung in der Betreffzeile
- Umbrechen Sie jede Körperzeile manuell mit 72 Zeichen
- Verwenden Sie den Körper, um zu erklären, was und warum anstatt wie
7 Regeln aus dem Blog von Chris Beam .
Festschreiben an einem bestimmten Datum
git commit -m 'Fix UI bug' --date 2016-07-01
Der --date
Parameter legt den Autor Datum. Dieses Datum wird beispielsweise in der Standardausgabe von git log
.
So erzwingen Sie auch das Commit-Datum :
GIT_COMMITTER_DATE=2016-07-01 git commit -m 'Fix UI bug' --date 2016-07-01
Der Parameter date akzeptiert die flexiblen Formate, die von GNU date unterstützt werden, beispielsweise:
git commit -m 'Fix UI bug' --date yesterday
git commit -m 'Fix UI bug' --date '3 days ago'
git commit -m 'Fix UI bug' --date '3 hours ago'
Wenn das Datum keine Uhrzeit angibt, wird die aktuelle Uhrzeit verwendet und nur das Datum wird überschrieben.
Auswählen, welche Zeilen zum Festlegen bereitgestellt werden sollen
Angenommen, Sie haben viele Änderungen in einer oder mehreren Dateien, aber von jeder Datei, für die Sie nur einige der Änderungen festschreiben möchten, können Sie die gewünschten Änderungen wie folgt auswählen:
git add -p
oder
git add -p [file]
Jede Ihrer Änderungen wird einzeln angezeigt. Bei jeder Änderung werden Sie aufgefordert, eine der folgenden Optionen auszuwählen:
y - Yes, add this hunk
n - No, don’t add this hunk
d - No, don’t add this hunk, or any other remaining hunks for this file.
Useful if you’ve already added what you want to, and want to skip over the rest.
s - Split the hunk into smaller hunks, if possible
e - Manually edit the hunk. This is probably the most powerful option.
It will open the hunk in a text editor and you can edit it as needed.
Dadurch werden die ausgewählten Teile der Dateien in Szene gesetzt. Dann können Sie alle inszenierten Änderungen wie folgt festlegen:
git commit -m 'Commit Message'
Die nicht bereitgestellten oder festgeschriebenen Änderungen werden weiterhin in Ihren Arbeitsdateien angezeigt und können bei Bedarf später festgeschrieben werden. Wenn die verbleibenden Änderungen unerwünscht sind, können sie verworfen werden mit:
git reset --hard
Abgesehen davon, dass eine große Änderung in kleinere Commits zerlegt wird, ist dieser Ansatz auch hilfreich, um zu überprüfen, was Sie gerade festlegen. Indem Sie jede Änderung einzeln bestätigen, haben Sie die Möglichkeit zu überprüfen, was Sie geschrieben haben, und Sie können das versehentliche Bereitstellen von unerwünschtem Code wie println / logging-Anweisungen vermeiden.
Ändern der Zeit eines Commits
Sie können den Zeitpunkt eines Commits mit ändern
git commit --amend --date="Thu Jul 28 11:30 2016 -0400"
oder auch
git commit --amend --date="now"
Änderung des Autors eines Commits
Wenn Sie ein Commit als falschen Autor festlegen, können Sie es ändern und dann ändern
git config user.name "Full Name"
git config user.email "[email protected]"
git commit --amend --reset-author
Die GPG-Signatur wird ausgeführt
Bestimmen Sie Ihre Schlüssel-ID
gpg --list-secret-keys --keyid-format LONG /Users/davidcondrey/.gnupg/secring.gpg -------------------------------------- sec 2048R/YOUR-16-DIGIT-KEY-ID YYYY-MM-DD [expires: YYYY-MM-DD]
Ihre ID ist ein alphanumerischer 16-stelliger Code, der auf den ersten Schrägstrich folgt.
Definieren Sie Ihre Schlüssel-ID in Ihrer git config
git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
Ab der Version 1.7.9 akzeptiert git commit die Option -S, um Ihren Commits eine Signatur zuzuordnen. Bei Verwendung dieser Option werden Sie zur Eingabe Ihrer GPG-Passphrase aufgefordert und Ihre Signatur zum Festschreibungsprotokoll hinzugefügt.
git commit -S -m "Your commit message"