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:

Geben Sie hier die Bildbeschreibung ein

Ä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

  1. Trennen Sie die Betreffzeile durch eine Leerzeile vom Hauptteil
  2. Begrenzen Sie die Betreffzeile auf 50 Zeichen
  3. Machen Sie die Betreffzeile groß
  4. Beenden Sie die Betreffzeile nicht mit einem Punkt
  5. Verwenden Sie die imperative Stimmung in der Betreffzeile
  6. Umbrechen Sie jede Körperzeile manuell mit 72 Zeichen
  7. 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

  1. 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.

  2. Definieren Sie Ihre Schlüssel-ID in Ihrer git config

    git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
    
  3. 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"
    


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow