Fügen Sie 'git commit -m' über die Befehlszeile einen Zeilenumbruch hinzu
746
Ich verwende Git über die Befehlszeile und versuche, der Festschreibungsnachricht (using git commit -m "") einen Zeilenumbruch hinzuzufügen, ohne auf Vim zuzugreifen.
So etwas GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -ewürde dir helfen, es zu vermeiden vim.
Jotik
Antworten:
694
Wie es gemacht wird, hängt natürlich von Ihrer Shell ab. In Bash können Sie einfache Anführungszeichen um die Nachricht verwenden und das Anführungszeichen einfach offen lassen, wodurch Bash zur Eingabe einer weiteren Zeile auffordert, bis Sie das Anführungszeichen schließen. So was:
git commit -m 'Message
goes
here'
Alternativ können Sie ein "Hier-Dokument" (auch als Heredoc bezeichnet) verwenden:
In der Antwort von @Peter Farmer wird später erwähnt, dass die Git-Konvention anscheinend so etwas wie: 1 Zeile für eine Zusammenfassung, zwei Zeilenumbrüche, dann eine detaillierte Nachricht.
Nick Spacek
4
Siehe auch den folgenden Beitrag von @esse. Ein einfacher Wagenrücklauf reicht aus.
Hakan Ensari
6
@ MohamadAli, unter Windows funktioniert das Parsen der Befehlszeile anders
Simon Richter
2
@ KelvinShadewing, ja, aber mit dem Unterschied, dass Shell-Substitutionsregeln für die Nachricht gelten, müssen Sie sich Dollarzeichen und anderen Metazeichen entziehen. Auf der anderen Seite können Sie Variablen verwenden.
Simon Richter
2
@Nikhil, viele Programme unterstützen einen einzelnen Bindestrich als Dateinamen, um stdin oder stdout zu bedeuten. Mit dem hiergit gezeigten Dokument kann der Befehl den Nachrichtentext von stdin lesen, und die -FOption gibt den Dateinamen an, aus dem die Nachricht gelesen werden soll.
Simon Richter
514
Wenn Sie beispielsweise nur eine Überschrift und eine Inhaltszeile möchten, können Sie Folgendes verwenden:
git commit -m "My head line"-m "My content line."
Beachten Sie, dass dadurch separate Absätze erstellt werden - keine Zeilen. Es wird also zwischen jeweils zwei -mZeilen eine Leerzeile stehen , z.
Dies hat den Vorteil, dass Sie unter Windows arbeiten können, wo das Zitieren von Tricks, die an anderer Stelle erwähnt wurden, nicht funktioniert. -mFür jede Zeile trennen . Nett!
Ddotsenko
8
Mit dieser Methode erstellte Nachrichten werden auf GitHub, GitHub für Windows und TortoiseGit korrekt angezeigt.
Richard
12
@ddotsenko dies ist der Vorteil der Arbeit unter Linux / Mac, wo wir eine anständige Shell haben =)
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功
7
Von man git commit: -m <msg>, --message = <msg> Verwenden Sie die angegebene <msg> als Festschreibungsnachricht. Wenn mehrere -m-Optionen angegeben werden, werden deren Werte als separate Absätze verkettet.
Amedee Van Gasse
55
Beachten Sie, dass dadurch separate Absätze erstellt werden - keine Zeilen. Es wird also eine leere Zeile zwischen jeweils zwei -mZeilen geben.
Ohad Schneider
398
Mit Git über die Befehlszeile mit Bash können Sie Folgendes tun:
git commit -m "this is
> a line
> with new lines
> maybe"
Einfach eingeben und drücken Enter Sie einfach ein Sie, wenn Sie eine neue Zeile möchten. Das Symbol ">" bedeutet, dass Sie gedrückt Enterhaben und es eine neue Zeile gibt. Andere Antworten funktionieren auch.
Abizerns Antwort verdeutlichte für mich, warum dies funktioniert - die Bash-Shell interpretiert einen <kbd> Enter </ kbd> -Tastendruck als neue Zeile, bis das erste doppelte Anführungszeichen "geschlossen" ist (mit einem nachfolgenden doppelten Anführungszeichen).
Kenny Evitt
1
Ich muss zustimmen, dass dies eine viel effektivere, einfachere und praktischere Lösung ist als die akzeptierte Antwort. Es funktioniert gut für mich mit Git 1.8.2.1. +1 von mir.
Crmpicco
Dies ist keine spezielle Funktion der Eingabetaste , sondern bezieht sich auf die Anführungszeichen. Ob Sie doppelte oder einfache Anführungszeichen verwenden, spielt keine Rolle, außer für die variable Erweiterung und das Ausblenden von Sonderzeichen. Deshalb habe ich in meiner Antwort einfache Anführungszeichen gewählt.
Simon Richter
2
Verwenden Sie dies nicht in zsh! Das Terminal wird geschlossen und Sie verlieren, was Sie eingegeben haben.
Wörter der Form $ ' string ' werden speziell behandelt. Das Wort wird zu Zeichenfolge erweitert
, wobei Zeichen mit Backslash-Escapezeichen gemäß ANSI C-Standard ersetzt werden.
Dies beinhaltet die Unterstützung für Zeilenumbrüche wie oben gezeigt sowie Hex- und Unicode-Codes und andere. Gehen Sie zum verknüpften Abschnitt, um eine Liste der Zeichen mit umgekehrten Schrägstrichen anzuzeigen.
@rsy: Welche Version von Bash benutzt du? Was sehen Sie, wenn Sie es tun echo $'one\ntwo'?
Bis auf weiteres angehalten.
1
rsy $ bash --version GNU bash, Version 3.2.53 (1) -freigabe (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Die Ausgabe dieses Befehls wird erwartungsgemäß in zwei verschiedenen Ausführungen angezeigt Linien!
ccoutinho
Für mich unter Windows 7 ist es die beste Option. Danke
Mohamad Ali
2
Das $ ist hier der Schlüssel und ich habe es auf den ersten Blick nicht bemerkt. Ansonsten bekomme ich nur ein \ n in der Mitte meiner Nachricht.
ChrisBob
1
Sie müssen nicht einmal das $ '...' für die gesamte Zeichenfolge verwenden. Wenn Sie dies nur um das Zeilenumbruchzeichen herum verwenden, funktioniert Folgendes : git commit -m "first line"$'\n'"second line". Beachten Sie nur, dass Sie die vorherige Zeichenfolge schließen müssen, bevor Sie mit dem Starten beginnen $'string'.
PlasmaBinturong
95
Hinzufügen von Zeilenumbrüchen zu Ihrem Git-Commit
Versuchen Sie Folgendes, um eine mehrzeilige Festschreibungsnachricht zu erstellen:
git commit -m "Demonstrate multi-line commit message in Powershell"-m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
Überprüfen Sie dann, was Sie getan haben:
git log -1
Sie sollten am Ende so etwas haben:
Der Screenshot stammt aus einem Beispiel, das ich mit PowerShell mit Poshgit eingerichtet habe.
Tolle Antwort. Ich habe mich lange danach umgesehen und zahlreiche verschiedene Möglichkeiten ausprobiert, um meine Git-Commit-Nachrichten zu formatieren, aber das funktioniert am besten. Ich kann bestätigen, dass es an der Eingabeaufforderung mit Git 1.8.2.1 funktioniert.
Crmpicco
1
In Powershell können Sie `n für Zeilenumbruch tun
Ecropolis
2
In Git Bash für Windows hat es sehr gut funktioniert .
Ulysses Alves
1
Dies sollte die gewählte Antwort sein, da es die am besten kompatible Methode ist. Dies hängt nicht von einer bestimmten CLI-Eingabeaufforderung ab, wie dies bei einigen anderen Vorschlägen der
1
Dies ist eine bessere Antwort und sollte als Antwort ausgewählt werden. Dies entspricht nicht nur dem Standardverhalten und bietet eine viel sauberere Festschreibungsnachricht, sondern ist auch mit mehreren -m etwas flexibler. Auch wenn es Windows-spezifisch aussieht und Windows-bezogene Kommentare hervorgerufen hat, funktioniert es auch unter Linux einwandfrei.
0xc0de
44
So etwas tun
git commit -m"test\ntest"
funktioniert nicht, aber so ähnlich
git commit -m"$(echo -e "test\ntest")"
funktioniert, aber es ist nicht sehr hübsch. Sie haben git-commitlbin Ihrem einen Befehl eingerichtet, PATHder ungefähr so funktioniert:
Ein Wort der Warnung, ich habe das Gefühl, dass die allgemeine Konvention darin besteht, eine Zusammenfassungszeile als erste Zeile und dann zwei Zeilenumbrüche und dann eine erweiterte Nachricht in der Festschreibungsnachricht zu haben. Wenn Sie also so etwas tun, wird diese Konvention verletzt. Sie könnten natürlich tun:
-m <msg>
--message = <msg>
Verwenden Sie die angegebene <msg> als Festschreibungsnachricht . Wenn mehrere -mOptionen angegeben sind, werden deren Werte als separate Absätze verkettet.
Wenn Sie also mehrere Festschreibungsnachrichten gruppieren möchten, sollte dies die folgende Aufgabe erfüllen:
Es ist nicht nötig, das Zeug zu komplizieren. Nach der -m "text...nächsten Zeile wird durch Drücken von Enter. Wann Entergedrückt wird, >erscheint. Wenn Sie fertig sind, "drücken Sie einfach Enter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42(HEAD -> test2)Author:**************<*********@gmail.com>Date:MonOct913:30:262017+0200Another way of demonstrating multicommit messages:This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
Dies ist eine großartige Antwort. Neue Zeilen werden auf Github korrekt angezeigt. Die erste Zeile wird als Überschrift angezeigt.
Yogesh Umesh Vaity
18
Ich verwende zsh auf einem Mac und kann mehrzeilige Festschreibungsnachrichten in doppelten Anführungszeichen (") veröffentlichen. Grundsätzlich tippe ich weiter und drücke die Eingabetaste für neue Zeilen, aber die Nachricht wird erst an Git gesendet, wenn ich die Anführungszeichen schließe und zurückkehre .
Sie können Git auch anweisen, einen Editor Ihrer Wahl zum Bearbeiten der Festschreibungsnachricht zu verwenden. Aus den Dokumenten zu git-commit :
Der zum Bearbeiten der Festschreibungsprotokollnachricht verwendete Editor wird aus der
GIT_EDITORUmgebungsvariablen, der core.editorKonfigurationsvariablen, der VISUALUmgebungsvariablen oder der EDITOR
Umgebungsvariablen (in dieser Reihenfolge) ausgewählt. Siehe git-var für Details.
Persönlich finde ich es am einfachsten, Commit-Nachrichten nachträglich in vi(oder was auch immer Ihr Git-Editor Ihrer Wahl ist) zu ändern, anstatt in der Befehlszeile, indem Sie git commit --amenddirekt danach vorgehen git commit.
Warum hat jemand dies abgelehnt? Dies ist die bequemste Art, mit mehrzeiligen Befehlen in Bash zu arbeiten. Sie müssen sie nur einmal richtig konfigurieren. Ich habe andere dumme Vorschläge verwendet, die in anderen Antworten hier gezeigt werden, aber sobald Sie gelernt haben, Ihre Befehle in Ihrem bevorzugten Texteditor zu bearbeiten, gibt es einfach keinen Weg zurück.
Aleks-Daniel Jakimenko-A.
1
Das ist so herzzerreißend nützlich, dass ich einfach nicht glauben kann, dass ich meine letzten Jahre ohne dies gelebt habe.
SoonDead
2
Hier ist eine Liste der fehlgeschlagenen Lösungen unter Windows mit der Standard-Shell cmd.exe (um Zeit beim Ausprobieren zu sparen!):
git commit -m 'HelloEnter funktioniert nicht: Es wird nicht nach einer neuen Zeile gefragt
git commit -m "HelloEnter idem
git commit -m "Hello^Enter idem
git commit -m 'Hello^EnterWorld'sieht aus wie arbeiten, weil es fragt "Mehr?" und erlaubt das Schreiben einer neuen Zeile, aber schließlich werden git logSie feststellen, dass es sich immer noch um eine einzeilige Nachricht handelt ...
TL; DR: Auch wenn unter Windows die Befehlszeilenanalyse anders funktioniert und ^mehrzeilige Eingaben zulässt, hilft dies hier nicht weiter.
Schließlich git commit -eist wahrscheinlich die beste Option.
Verwenden Sie diese traurige, traurige Entschuldigung nur nicht für ein "Shell" -Fensterangebot.
Bis zum
2
Leider scheint Git in seiner Nachricht kein Zeilenumbruchzeichen zuzulassen. Es gibt bereits verschiedene vernünftige Lösungen, aber beim Skripten sind diese ärgerlich. Hier funktionieren Dokumente auch, können aber auch etwas zu nervig sein, um damit umzugehen (denken Sie an Yaml-Dateien).
Dies ist zwar auch noch hässlich, erlaubt aber "Einzeiler", die immer noch nützlich sein können. Da die Zeichenfolgen normalerweise Variablen sind oder mit Variablen kombiniert werden, können die Hässlichkeiten auf ein Minimum beschränkt werden.
Ich sehe niemanden, der das erwähnt, wenn Sie keine Nachricht übermitteln Nano für Sie geöffnet wird (zumindest unter Linux), wo Sie mehrere Zeilen schreiben können ...
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
würde dir helfen, es zu vermeidenvim
.Antworten:
Wie es gemacht wird, hängt natürlich von Ihrer Shell ab. In Bash können Sie einfache Anführungszeichen um die Nachricht verwenden und das Anführungszeichen einfach offen lassen, wodurch Bash zur Eingabe einer weiteren Zeile auffordert, bis Sie das Anführungszeichen schließen. So was:
Alternativ können Sie ein "Hier-Dokument" (auch als Heredoc bezeichnet) verwenden:
quelle
git
gezeigten Dokument kann der Befehl den Nachrichtentext von stdin lesen, und die-F
Option gibt den Dateinamen an, aus dem die Nachricht gelesen werden soll.Wenn Sie beispielsweise nur eine Überschrift und eine Inhaltszeile möchten, können Sie Folgendes verwenden:
Beachten Sie, dass dadurch separate Absätze erstellt werden - keine Zeilen. Es wird also zwischen jeweils zwei
-m
Zeilen eine Leerzeile stehen , z.quelle
-m
Für jede Zeile trennen . Nett!man git commit
: -m <msg>, --message = <msg> Verwenden Sie die angegebene <msg> als Festschreibungsnachricht. Wenn mehrere -m-Optionen angegeben werden, werden deren Werte als separate Absätze verkettet.-m
Zeilen geben.Mit Git über die Befehlszeile mit Bash können Sie Folgendes tun:
Einfach eingeben und drücken Enter Sie einfach ein Sie, wenn Sie eine neue Zeile möchten. Das Symbol ">" bedeutet, dass Sie gedrückt Enterhaben und es eine neue Zeile gibt. Andere Antworten funktionieren auch.
quelle
Sie sollten in der Lage sein zu verwenden
Aus dem Bash-Handbuch :
Dies beinhaltet die Unterstützung für Zeilenumbrüche wie oben gezeigt sowie Hex- und Unicode-Codes und andere. Gehen Sie zum verknüpften Abschnitt, um eine Liste der Zeichen mit umgekehrten Schrägstrichen anzuzeigen.
quelle
echo $'one\ntwo'
?git commit -m "first line"$'\n'"second line"
. Beachten Sie nur, dass Sie die vorherige Zeichenfolge schließen müssen, bevor Sie mit dem Starten beginnen$'string'
.Hinzufügen von Zeilenumbrüchen zu Ihrem Git-Commit
Versuchen Sie Folgendes, um eine mehrzeilige Festschreibungsnachricht zu erstellen:
Überprüfen Sie dann, was Sie getan haben:
Sie sollten am Ende so etwas haben:
Der Screenshot stammt aus einem Beispiel, das ich mit PowerShell mit Poshgit eingerichtet habe.
quelle
So etwas tun
funktioniert nicht, aber so ähnlich
funktioniert, aber es ist nicht sehr hübsch. Sie haben
git-commitlb
in Ihrem einen Befehl eingerichtet,PATH
der ungefähr so funktioniert:Und benutze es so:
Ein Wort der Warnung, ich habe das Gefühl, dass die allgemeine Konvention darin besteht, eine Zusammenfassungszeile als erste Zeile und dann zwei Zeilenumbrüche und dann eine erweiterte Nachricht in der Festschreibungsnachricht zu haben. Wenn Sie also so etwas tun, wird diese Konvention verletzt. Sie könnten natürlich tun:
quelle
Aus der Git-Dokumentation :
Wenn Sie also mehrere Festschreibungsnachrichten gruppieren möchten, sollte dies die folgende Aufgabe erfüllen:
quelle
Ich hoffe, dass dies nicht zu weit von der gestellten Frage entfernt ist, sondern den Standardeditor festlegt und dann verwendet
könnte viel bequemer sein.
quelle
-e
Es ist nicht nötig, das Zeug zu komplizieren. Nach der
-m "text...
nächsten Zeile wird durch Drücken von Enter. Wann Entergedrückt wird,>
erscheint. Wenn Sie fertig sind,"
drücken Sie einfach Enter:quelle
Ich verwende zsh auf einem Mac und kann mehrzeilige Festschreibungsnachrichten in doppelten Anführungszeichen (") veröffentlichen. Grundsätzlich tippe ich weiter und drücke die Eingabetaste für neue Zeilen, aber die Nachricht wird erst an Git gesendet, wenn ich die Anführungszeichen schließe und zurückkehre .
quelle
In Bash / Zsh können Sie einfach wörtliche Zeilenumbrüche in Anführungszeichen verwenden:
ANSI-C-Zitate funktionieren auch in Bash / Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
Sie können Git auch anweisen, einen Editor Ihrer Wahl zum Bearbeiten der Festschreibungsnachricht zu verwenden. Aus den Dokumenten zu git-commit :
quelle
Persönlich finde ich es am einfachsten, Commit-Nachrichten nachträglich in
vi
(oder was auch immer Ihr Git-Editor Ihrer Wahl ist) zu ändern, anstatt in der Befehlszeile, indem Siegit commit --amend
direkt danach vorgehengit commit
.quelle
git commit -e
.git commit
, und es wird ein Editor mit einer Commit-Nachrichtenvorlage geöffnet.Wenn Sie Bash verwenden, drücken Sie
C-x C-e
( Ctrl+x Ctrl + e) und der aktuelle Befehl wird in Ihrem bevorzugten Editor geöffnet.Sie können den bevorzugten Editor ändern, indem Sie
VISUAL
und anpassenEDITOR
.Das habe ich in meinem
.bashrc
:quelle
Hier ist eine Liste der fehlgeschlagenen Lösungen unter Windows mit der Standard-Shell cmd.exe (um Zeit beim Ausprobieren zu sparen!):
git commit -m 'Hello
Enter funktioniert nicht: Es wird nicht nach einer neuen Zeile gefragtgit commit -m "Hello
Enter idemgit commit -m "Hello^
Enter idemgit commit -m 'Hello^
EnterWorld'
sieht aus wie arbeiten, weil es fragt "Mehr?" und erlaubt das Schreiben einer neuen Zeile, aber schließlich werdengit log
Sie feststellen, dass es sich immer noch um eine einzeilige Nachricht handelt ...TL; DR: Auch wenn unter Windows die Befehlszeilenanalyse anders funktioniert und
^
mehrzeilige Eingaben zulässt, hilft dies hier nicht weiter.Schließlich
git commit -e
ist wahrscheinlich die beste Option.quelle
Leider scheint Git in seiner Nachricht kein Zeilenumbruchzeichen zuzulassen. Es gibt bereits verschiedene vernünftige Lösungen, aber beim Skripten sind diese ärgerlich. Hier funktionieren Dokumente auch, können aber auch etwas zu nervig sein, um damit umzugehen (denken Sie an Yaml-Dateien).
Folgendes habe ich getan:
Dies ist zwar auch noch hässlich, erlaubt aber "Einzeiler", die immer noch nützlich sein können. Da die Zeichenfolgen normalerweise Variablen sind oder mit Variablen kombiniert werden, können die Hässlichkeiten auf ein Minimum beschränkt werden.
quelle
Ich sehe niemanden, der das erwähnt, wenn Sie keine Nachricht übermitteln Nano für Sie geöffnet wird (zumindest unter Linux), wo Sie mehrere Zeilen schreiben können ...
Nur das brauchte:
quelle