Git-Commit ohne Commit-Nachricht


108

Wie kann ich Änderungen festschreiben, ohne eine Festschreibungsnachricht anzugeben? Warum ist es standardmäßig erforderlich?


6
Schließlich git commit -a --allow-empty-message -m ''wird nicht einmal mehr ein Editor geöffnet. Siehe meine Antwort unten
VonC

2
Unter Windows führt dieser Befehl git commit -a --allow-empty-message -m ''ein Commit mit der Commit-Nachricht " ''" aus. Daher ist es besser, stattdessen diesen Befehl zu verwenden : git commit -a --allow-empty-message -m "".
Tav

Antworten:


137

git erfordert im Allgemeinen eine nicht leere Nachricht, da die Bereitstellung einer aussagekräftigen Festschreibungsnachricht Teil einer guten Entwicklungspraxis und einer guten Verwaltung des Repositorys ist. Die erste Zeile der Commit-Nachricht wird überall in git verwendet. Weitere Informationen finden Sie unter "Ein Hinweis zu Git Commit-Nachrichten" .

Wenn Sie Terminal.app cdin Ihrem Projektverzeichnis und öffnen git commit -am '', werden Sie feststellen, dass dies fehlschlägt, da eine leere Festschreibungsnachricht nicht zulässig ist. Neuere Versionen von git haben das
--allow-empty-messageBefehlszeilenargument, einschließlich der Version von git, die in der neuesten Version von Xcode enthalten ist. Auf diese Weise können Sie diesen Befehl verwenden, um ein Commit mit einer leeren Nachricht durchzuführen:

git commit -a --allow-empty-message -m ''

Vor dem --allow-empty-messageFlag mussten Sie den commit-treeInstallationsbefehl verwenden. Ein Beispiel für die Verwendung dieses Befehls finden Sie im Kapitel "Raw Git" des Git-Buches .


1
Neuere Versionen von githaben das --allow-empty-messageBefehlszeilenargument. Siehe die Dokumentation hier . Es wird erwähnt, dass Sie früher mit dem Installationsbefehl dasselbe erreichen konnten git-commit-tree.
Jeremy W. Sherman

18
Ich denke, der Satz "Bereitstellen einer aussagekräftigen Commit-Nachricht ist Teil einer guten Entwicklungspraxis" ist einfach falsch - man kann sagen, dass das Bereitstellen einer aussagekräftigen Commit-Nachricht als Teil einer guten Entwicklungspraxis angesehen wird, da die Aussage sowieso trennend ist - ich jedenfalls glauben, dass weniger Informationen manchmal zu weniger Verwirrung führen, zumal git offensichtlich die tatsächlichen Änderungen am Repository speichert und a git diffdem Interessenten genau zeigt, was ein Commit enthält, ohne sich auf menschliche schriftliche Beschreibungen zu verlassen. Maschinen sollten uns nach Möglichkeit vor Arbeit bewahren.
Am

2
@amn, ich habe gerade angefangen, mich über all die Zehntausende gut geschriebener Commit-Nachrichten zu wundern, die ich geschrieben habe und die niemals von irgendjemandem gelesen werden. Für mich ist der Wert dieser Gewohnheit jetzt, dass sie mich zwingt, die Änderungen durchzusehen, um sie zu beschreiben, und dies lässt mich manchmal Fehler bemerken. Sie haben jedoch Recht. Ich werde in Betracht ziehen, dem Code mehr Aufmerksamkeit zu schenken und der Commit-Nachricht weniger.
osa

7
Git wird nicht mehr nur für die Codeentwicklung verwendet. Wenn ich eine GitHub-Wiki-Seite oder ein Overleaf LaTeX-Dokument aktualisiere, gibt es normalerweise nichts zu sagen, da ich die Dokumentation aktualisiere . Alles, was an der Änderung semantisch bedeutsam ist, ist im Diff enthalten. Ich habe tatsächlich festgestellt, dass ich den Text der Änderung als Commit-Nachricht selbst verwendet habe: völlig redundant!
Jim Pivarski

1
@amn, manchmal ist die Ausgabe von git diffnicht selbsterklärend, selbst wenn der Committer glaubt, dass dies der Fall ist.
Cowlinator

26

Und wenn Sie einen Alias ​​dafür hinzufügen, ist es sogar noch besser, oder?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Jetzt machst du einfach ein nccommit, nc, weil es keinen Kommentar gibt, und alles sollte festgeschrieben werden.


19

Wenn Sie an einem wichtigen Code-Update arbeiten und wirklich einen Zwischen-Sicherheitspunkt benötigen, können Sie Folgendes tun:

git commit -am'.'

oder kürzer:

git commit -am.

Und was macht das?
fishinear

Fügt ein Commit mit der Nachricht '.'
lackadaisical

Ich benutze diese Methode, wenn ich mich buchstäblich nicht daran erinnere, was ich in ein Commit gesteckt habe, und zu faul bin diff.
TheTechRobo36414519

16

Hinweis: Ab git1.8.3.2 (Juli 2013) öffnet der folgende Befehl ( oben von Jeremy W Sherman erwähnt ) keinen Editor mehr:

git commit --allow-empty-message -m ''

Siehe Commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Wenn eine leere Nachricht mit der Option -mgit commit angegeben wird, wird der Editor gestartet.
Das ist unerwartet und unnötig.
Denken Sie direkt daran, ob die Option angegeben wurde, anstatt die Länge der Nachrichtenzeichenfolge zu verwenden, um zu überprüfen, ob der Benutzer eine -mangegeben hat.


Git 2.9 (Juni 2016) verbessert das Verhalten leerer Nachrichten:

Siehe Commit 178e814 (06. April 2016) von Adam Dinwoodie ( me-and) .
Siehe Commit 27014cb (07. April 2016) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 0709261 , 22. April 2016)

commit: Ignorieren Sie keine leere Nachricht von -m ''

  • " git commit --amend -m '' --allow-empty-message", obwohl es seltsam aussieht, ist eine gültige Aufforderung, das Commit so zu ändern, dass überhaupt keine Nachricht angezeigt wird.
    Aufgrund der falschen Erkennung des Vorhandenseins von -min der Befehlszeile haben wir die Protokollnachrichten vom ursprünglichen Commit ferngehalten.
  • " git commit -m "$msg" -F file" sollte abgelehnt werden, ob $msges sich um eine leere Zeichenfolge handelt oder nicht, wurde jedoch aufgrund desselben Fehlers nicht abgelehnt, wenn sie $msgleer ist.
  • " git -c template=file -m "$msg"" sollte die Vorlage ignorieren, auch wenn sie $msgleer ist, aber sie hat den Inhalt aus der Vorlagendatei nicht verwendet.

3

Sie brauchen keinen Git, um dies zu erreichen. Die kreative Verwendung einer Bash-Funktion reicht völlig aus. Wenn Sie sich nicht für Nachrichten interessieren, legen Sie einfach eine Standardnachricht fest und vergessen Sie sie.

function gitcom() {
  git commit -m "my default commit message"
}

Wenn Sie sich wirklich abenteuerlustig fühlten, konnten Sie mit einem Befehl hinzufügen, festlegen und pushen

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Als was würdest du dann laufen

gitzap origin master

Sie können sogar tiefer gehen und parse_git_branch verwenden, um sich dort einige Tastenanschläge zu ersparen, oder einen allgemeinen Standardwert für "origin" und "master" festlegen.


1
Können Sie weitere Informationen zum Einrichten dieser Bash-Funktion bereitstellen?
Adam

1
Angenommen, Sie arbeiten unter OSX oder Linux, können Sie diese Funktionen kopieren und in Ihrem .profile ablegen (sollte sich in Ihrem Home-Ordner befinden, wenn nicht, erstellen Sie es). Öffnen Sie ein neues Konsolenfenster und diese Befehle stehen Ihnen zur Verfügung. Bei Änderungen an diesen Dateien müssen Sie die Bash-Sitzung aktualisieren, damit Sie die Dinge beschleunigen können, indem Sie der Datei die folgenden Aliase hinzufügen: alias ea = "subl ~ / .profile" # subl ist mein Texteditor, der durch Ihren eigenen ersetzt wird alias er = "source ~ / .profile" # dies wird zurückgesetzt Wenn Sie nun Verknüpfungen hinzufügen möchten, geben Sie einfach "ea" ein (Aliase bearbeiten) und aktualisieren er
Steven Garcia

2
Wenn Sie die Skripte git-comund git-zap(ohne Erweiterungen) aufgerufen und irgendwo platziert haben, wo git sie finden kann (dh irgendwo in Ihrem Pfad), behandelt git sie wie normale git-Befehle und Sie können sie wie git comgit zap origin master
folgt

1
in bash ist es entweder function gitcom {oder gitcom() {TMK, fix?

2

Git benötigt ein Commit, um einen Kommentar zu haben, andernfalls wird das Commit nicht akzeptiert.

Sie können eine Standardvorlage mit git als Standard-Commit-Nachricht konfigurieren oder das Flag --allow-empty-message in git nachschlagen. Ich denke (nicht 100% sicher), dass Sie git neu konfigurieren können, um leere Commit-Nachrichten zu akzeptieren (was keine so gute Idee ist). Normalerweise sollte jedes Commit ein Stück Arbeit sein, das in Ihrer Nachricht beschrieben wird.


1
Ich bin mir nicht sicher, warum diese Antwort abgelehnt wurde. Ich bin damit einverstanden, dass es eine schlechte Idee ist, Git zu zwingen, leere Commit-Nachrichten zu akzeptieren oder eine Nachricht wie "Speichern" zu verwenden. Hören Sie auf, dagegen anzukämpfen, und lernen Sie einfach das verdammte Werkzeug.
Jezen Thomas

1

Ich habe die einfachste Lösung gefunden:

git commit -am'save'

Das ist alles, Sie werden um Git Commit Message Sachen herumarbeiten.

Sie können dieses Lob sogar für eine Bash oder andere Dinge speichern, um es einfacher zu machen.

Unsere Teammitglieder schreiben diese Nachrichten immer, aber fast niemand wird diese Nachricht wieder sehen.

Commit-Nachrichten sind zumindest in unserem Team ein Zeitraffer, daher ignorieren wir sie.


1

Ich habe die folgende Konfiguration in meinem privaten Projekt:

git config alias.auto 'commit -a -m "changes made from [device name]"'

Auf diese Weise tue ich es, wenn ich es eilig habe

git auto
git push

Und zumindest weiß ich, von welchem ​​Gerät das Commit gemacht wurde.


-5

Die Festschreibungsnachricht ist eine bewährte Methode, die jederzeit befolgt werden sollte. Es sei denn, Sie sind der einzige Entwickler und das wird sich in Kürze nicht ändern.

git commit -a -m 'asdfasdfadsfsdf'

Das ist eine Art Witz. Aber für kleine Verpflichtungen, die Sie vornehmen MÜSSEN, um die Änderungen an Heroku zu senden (zum Beispiel), ist dies in der einzelnen Entwicklerinstanz in Ordnung.
Coloradoblue
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.