Git Commit öffnet eine leere Textdatei, wofür?

93

In allen Git-Tutorials, die ich gelesen habe, heißt es, dass Sie Folgendes tun können:

git init
git add .
git commit

Wenn ich das mache, wird eine große Textdatei geöffnet. Keines der Tutorials scheint dies zu behandeln, daher weiß ich nicht, was ich mit der Datei tun oder was ich in sie einfügen soll, wenn überhaupt.

zufällig
quelle

Antworten:

124

Sie sollen die Festschreibungsnachricht in diese Textdatei einfügen, dann speichern und beenden.

Sie können den Standard-Texteditor ändern, den git mit diesem Befehl verwendet:

git config --global core.editor "nano"

Sie müssen nano in einen Befehl ändern, der normalerweise Ihren Texteditor öffnet.

Vikhyat
quelle
15
Müssen Sie nicht hinzufügen --global, um die Standardeinstellung zu ändern?
Znarkus
4
@ Znarkus guter Punkt. Sehen Sie hier für weitere Informationen. Grundsätzlich würde die gegebene Antwort nur die Einstellung für das aktuelle Projekt ändern, während --globalsie für den aktuellen Benutzer und --systemfür alle auf diesem Computer geändert wird.
Matt Fenwick
24
Diese Antwort enthält zwar gute Informationen, geht jedoch nicht auf die eigentliche Frage ein.
Adrian Schmidt
5
Ich verstehe nicht, warum dies doppelt so viele positive Stimmen hat wie einige der Antworten, die die Frage tatsächlich beantworten. Das tut nicht.
Johan
2
@Johan, du liegst nicht falsch, aber nachdem ich darauf gestoßen bin, fand ich diese Antwort äußerst hilfreich. Also habe ich es positiv bewertet.
Danation
65

Wie von Ben Collins erwähnt -m "...", ist diese geöffnete "große Textdatei" ohne das Argument, das Commit inline einzugeben (was im Allgemeinen eine schlechte Idee ist, da es Sie dazu ermutigt, sich kurz zu fassen), ein Fenster, in das die Commit-Nachricht eingegeben werden kann .

Normalerweise wird empfohlen, eine Zusammenfassung in die erste Zeile zu schreiben, eine Zeile zu überspringen und dann detailliertere Notizen darunter zu schreiben. Dies hilft Programmen, die beispielsweise die Festschreibungsnachrichten per E-Mail mit einer entsprechenden Betreffzeile und der vollständigen Liste der am Text vorgenommenen Änderungen ausführen.

Anstatt die EDITORShell-Variable zu ändern, können Sie auch den verwendeten Editor ändern, indem Sie die zusätzlichen Zeilen in Ihre ~/.gitconfigDatei einfügen:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Diese zweite Zeile hat eigentlich nichts mit Ihrem Problem zu tun, aber ich finde sie wirklich nützlich, damit ich meine ~/.gitignoreDatei mit all den Dateitypen füllen kann, von denen ich weiß, dass ich sie niemals in ein Repository übertragen möchte.

Will Robertson
quelle
36

Die Textdatei, die geöffnet wird, ist eine Zusammenfassung des aktuellen Festschreibungsvorgangs. Das Git-Commit fügt Sie in diese Datei ein, sodass Sie oben in der Datei eine Commit-Nachricht hinzufügen können. Sobald Sie Ihre Nachricht hinzugefügt haben, speichern Sie diese Datei und beenden Sie sie.

Es gibt auch einen "-m msg" -Schalter für diesen Befehl, mit dem Sie die Festschreibungsnachricht in der Befehlszeile hinzufügen können.

Lou
quelle
Hallo Lou, ich bin auch ein Anfänger bei GIt. Ich denke, nachdem ich die Textdatei existiere oder schreibe und existiere, hat der Git die Inszenierung und die Commit-Nachricht, die ich gerade geschrieben habe, nicht wirklich festgeschrieben. Was bedeutet es also, die Nachricht zu dieser Textdatei hinzuzufügen, wenn ich das Commit nach dem Schreiben nicht ausführen und beenden kann? (Bitte korrigieren Sie mich, wenn ich falsch lag, vielen Dank)
SLN
@ SLN Das Szenario, das Sie skizzieren, ist nicht sehr klar. Ich werde eine Vermutung anstellen und vorschlagen, dass Sie möglicherweise keine Datei für das Festschreiben bereitgestellt haben, daher hat Ihr Versuch, ein Festschreiben durchzuführen, nichts bewirkt. Verwenden Sie "git add" für Dateien der ersten Stufe, die Sie festschreiben möchten, und dann "git commit", um das eigentliche Festschreiben durchzuführen.
Lou
15

Wenn Sie unter Mac OS X arbeiten und BBEdit verwenden, können Sie dies als Editor Ihrer Wahl für Festschreibungsnachrichten einrichten:

git config --global core.editor "bbedit -w"

Wenn Sie mit dem Bearbeiten fertig sind, speichern und schließen Sie die Datei. Git verwendet sie für die Kommentare.


quelle
15

Angenommen, Ihr Editor ist standardmäßig vi / vim, können Sie den Commit-Nachrichteneditor beenden, indem Sie Folgendes eingeben:

:x

Dadurch wird die Commit-Nachrichtendatei gespeichert und beendet. Dann kehren Sie zum normalen git-Befehlsabschnitt zurück.

Weitere vi-Befehle:
http://www.lagmonster.org/docs/vi.html

MatthiasS
quelle
9
Wenn Sie wie ich sind, waren Sie im Einfüge- / Ersetzungsmodus (dh geben Sie die Festschreibungsnachricht ein). In diesem escFall müssen Sie drücken , um in den Befehlsmodus zu gelangen, bevor Sie :xzum Speichern und Beenden eingeben .
Martin Carney
1
Vorausgesetzt natürlich, sein Editor ist standardmäßig vi / vim. Dies würde nicht für alle gelten. Sicher nicht für diesen Emacs-Benutzer;)
Haziz
Das hat mir viel Ärger erspart. Vielen Dank
Danation
12

Wie alle gesagt haben, fügen Sie hier nur Ihren Commit-Kommentar hinzu. Bei einigen ist dies jedoch möglicherweise immer noch verwirrend, insbesondere wenn Sie Ihre Editoreinstellungen nicht konfiguriert haben und nicht wissen, was VI ist. Dann könnten Sie einen Schock erleben , weil du denkst, du bist noch im GIT-Bash

In diesem Fall befinden Sie sich tatsächlich in einem Texteditor mit einigen interessanten Möglichkeiten, mit Dingen umzugehen, und dieser Befehlssatz kann Ihnen dabei helfen, Ihr erstes Commit zu überwinden und dann einen Editor zu konfigurieren, mit dem Sie vertraut sind oder den Sie verwenden eine Gelegenheit zu lernen, wie man es benutzt.

Stephen Bailey
quelle
8
Ich weiß, dass es mich immer schockiert, in vi zu landen :)
Will Robertson
1
Die Dinge machen jetzt so viel mehr Sinn. +1
Matt Ellen
11

Mit der -mOption zum Festschreiben können Sie eine Festschreibungsnachricht in die Befehlszeile eingeben:

git commit -m "my first commit"
Greg Hewgill
quelle
7

Wenn Sie ein neues Commit erstellen, startet git einen Texteditor und schreibt einige Dinge hinein.

Mit diesem Texteditor möchten Sie die Festschreibungsnachricht schreiben, die mit Ihrem frisch erstellten Festschreiben verknüpft wird.

Speichern und beenden Sie anschließend den Texteditor. Git verwendet das, was Sie geschrieben haben, als Commit-Nachricht.

Die Festschreibungsnachricht hat eine bestimmte Struktur, die wie folgt beschrieben wird:

Die erste Zeile der Festschreibungsnachricht wird als Nachrichtenkopf (oder Titel) verwendet. Die bevorzugte Länge des Commit-Headers beträgt weniger als 40 Zeichen, da dies die Anzahl der Zeichen ist, die Github auf der Registerkarte Commits eines bestimmten Repositorys anzeigt, bevor es abgeschnitten wird, was manche Leute als irritierend empfinden.

Beim Erstellen der Kopfzeile ist die Verwendung eines großgeschriebenen Präsensverbs für das erste Wort gängige Praxis, jedoch überhaupt nicht erforderlich.

Eine neue Zeile beschreibt den Header und den Text der Nachricht.

Der Körper kann bestehen, was immer Sie wollen. Ein Überblick über die durch Ihr Commit eingeführten Änderungen ist angemessen. Einige Anwendungen von Drittanbietern verwenden Informationen, einschließlich der Festschreibungsnachrichten, um verschiedene Arten von Hooks auszulösen (ich denke, Gerrit und Pivotal Tracker, um nur zwei zu nennen).

Hier ist ein kurzes und süßes Beispiel. Ein führender #Punkt kennzeichnet einen Kommentar.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Hier meint ein Herr Torvalds, was ein gutes Engagement ausmacht.

Und hier tut Tpope es ebenfalls.

Wie in mehreren anderen Antworten angegeben, ist das Ändern des Standardeditors ein Einzeiler in der Befehlszeile.

Für meine Präferenz:

git config --global core.editor "vim"
Nein danke
quelle
2
Dies sollte die akzeptierte Antwort auf die Frage sein.
Mppfiles
6

Versuchen Sie Escape und dann ZZ, nachdem Sie Ihre Nachricht eingegeben haben. Wie andere gesagt haben, wird beim Ausführen dieses Commit-Befehls tatsächlich ein Texteditor ausgeführt, in den die Nachricht eingegeben werden kann. In meinem Fall (OS X) war es VI, was ich nach einigem Stöbern herausgefunden habe. In diesem Fall drücken Sie Escape, um in den "Befehls" -Modus (im Gegensatz zum INSERT-Modus) zu wechseln und ZZ einzugeben. Ich bin mir sicher, dass es andere Möglichkeiten gibt, die Aufgabe zu erfüllen, aber das hat es für mich getan. Da ich noch nie VI oder Emacs verwendet hatte, war es für mich nicht ohne weiteres ersichtlich und wurde in keinem der von mir verwendeten Anfängerhandbücher erwähnt. Hoffentlich hilft das.

TheGeoff
quelle
4

Der git commitBefehl öffnet den in der EDITORUmgebungsvariablen angegebenen Editor , sodass Sie einen Festschreibungskommentar eingeben können. Auf einem Linux- oder BSD-System sollte dies standardmäßig vi sein, obwohl jeder Editor funktionieren sollte.

Geben Sie einfach Ihre Kommentare ein und speichern Sie die Datei.

Ben Collins
quelle
2

Ich war verwirrt, weil ich immer wieder versuchte, einen Dateinamen nach dem: w in VIM einzugeben. Das löst das Commit nicht aus. Stattdessen erhielt ich immer wieder die Meldung "Commit wegen leerer Commit-Nachricht abbrechen". Setzen Sie keinen Dateinamen nach: w. : w speichert die Datei standardmäßig in .git / COMMIT_EDITMSG. Dann: q zum Beenden, um das Festschreiben abzuschließen. Sie können die Ergebnisse mit Git-Protokoll sehen.

user360221
quelle
oder Sie können einfach verwenden: x zum Speichern und Beenden.
TJ Ellis
2

Nachdem ich meinen Editor auf Emacs umgestellt habe, funktioniert alles einwandfrei.

Aber bevor ich dies einstellte, öffnete "git commit -a" gedit, endete aber sofort mit einem "Abbruch des Commits aufgrund einer leeren Commit-Nachricht". Das Speichern der Datei aus gedit hatte keine Auswirkung. Das explizite Setzen des Editors mit "git config --global core.editor" gedit "" hatte das gleiche Ergebnis.

An Emacs ist nichts auszusetzen, aber aus Neugier, warum funktioniert das nicht mit Gedit, und gibt es eine Möglichkeit, es zum Laufen zu bringen?

Vielen Dank.

Peter
quelle
Wenn gedit bereits ausgeführt wird, wird durch Ausführen von "gedit file.txt" die Datei im vorhandenen Fenster geöffnet und sofort zurückgegeben. Sie sollten dies als tatsächliche Frage posten, insbesondere zur Verwendung von gedit mit git.
Araqnid
6
lief auch in diese. Sie können das git config --global core.editor "gedit -s"
Problem
2

Für diejenigen unter Ihnen, die OS XI verwenden, hat dieser Befehl gut funktioniert:
git config --global core.editor "open -t -W"

Dadurch wird git gezwungen, den Standardtexteditor (in meinem Fall textedit) zu öffnen und dann darauf zu warten, dass Sie die Anwendung beenden. Beachten Sie, dass Sie textedit "Speichern" und dann "Beenden" müssen, bevor das Commit ausgeführt wird. Es gibt einige andere Befehle, mit denen Sie herumspielen können, wie auf dieser Seite beschrieben:

Apple Developer Library - Befehl öffnen

Sie können auch versuchen, git config --global core.editor "open -e -W"ob git immer textedit öffnen soll, unabhängig vom Standardeditor.

JiuJitsuCoder
quelle
1

Ja, stellen Sie sicher, dass Sie einen vernünftigen Editor haben. Ich bin mir nicht sicher, was Ihr Standardeditor sein wird, aber wenn es wie ich Nano ist (wird nach der Eingabe von Commit irgendwo in der Nähe der Spitze angezeigt), müssen Sie nur einen Kommentar eingeben und dann Strg-x drücken, um den Vorgang abzuschließen. Drücken Sie dann y und anschließend die Eingabetaste, um das Commit zu bestätigen.

Wenn Sie eine einfache Liste der Dateien anzeigen möchten, legen Sie diese fest, anstatt zuvor eine große Diff-Liste zu erstellen

git diff --name-only
Tom Martin
quelle
1

Wenn Sie eine Revisionskontrolle durchführen, sollten Sie immer erklären, welche Änderungen Sie vorgenommen haben. Normalerweise haben Sie zum ersten Mal einen Kommentar wie "Initial Commit".

Auf lange Sicht möchten Sie jedoch für jedes Commit einen guten Kommentar abgeben. Sie werden etwas von der Form wollen:

Experimentelles Feature x hinzugefügt.

X erhöht die Leistung von Merkmal Y in Bedingung Z. Wenn Sie X benötigen, aktivieren Sie es mit den Schaltern -x oder --feature-eks. Dies adressiert die Funktionsanforderung Nr. 1138.

Flamme
quelle
1

Da ich auch neu im Terminal bin, hat "Escape and then ZZ" für mich funktioniert. Ich habe dieses Problem seit Monaten und konnte auch keinen Weg finden, es zu umgehen.

Vielen Dank an TheGeoff für Ihren einfachen Rat!

Yarito
quelle
0

Folgendes ist wahrscheinlich der einfachste Weg, um alle Änderungen zu übernehmen:

git commit -a -m "Type your commit message here..."

Natürlich gibt es viel detailliertere Möglichkeiten zum Festschreiben, aber das sollte Ihnen den Einstieg erleichtern.

PHLAK
quelle