it-swarm.com.de

Fügen Sie über die Befehlszeile einen Zeilenumbruch zu 'git commit -m' hinzu

Ich benutze Git von der Kommandozeile und versuche, der Commit-Nachricht einen Zeilenumbruch hinzuzufügen (mit git commit -m ""), ohne in Vim einzusteigen.

Ist das möglich?

662
Alan Whitelaw

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 aufgefordert wird, 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:

git commit -F- <<EOF
Message

goes
here
EOF
600
Simon Richter

Wenn Sie beispielsweise nur eine Überschrift und eine Inhaltszeile benötigen, können Sie Folgendes verwenden:

git commit -m "My head line" -m "My content line."
422
Simon

Wenn Sie Git von der Befehlszeile mit Bash aus verwenden, können Sie Folgendes tun:

git commit -m "this is
> a line
> with new lines
> maybe"

Einfach tippen und drücken Enter Wenn Sie eine neue Zeile wünschen, bedeutet das Symbol ">", dass Sie gedrückt haben Enter, und es gibt eine neue Zeile. Andere Antworten funktionieren auch.

381
esse

Sie sollten verwenden können

git commit -m $'first line\nsecond line'

Aus dem Bash-Handbuch :

Wörter der Form $ ' string ' werden speziell behandelt. Das Wort wird zu einer Zeichenfolge erweitert, wobei mit einem Schrägstrich versehene Zeichen gemäß dem ANSI C-Standard ersetzt werden.

Dies schließt die Unterstützung für Zeilenumbrüche wie oben gezeigt sowie Hex- und Unicode-Codes und andere ein. Wechseln Sie zu dem verknüpften Abschnitt, um eine Liste der mit Backslash versehenen Zeichen anzuzeigen.

93

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

Dann überprüfe, was du getan hast:

git log -1

Sie sollten am Ende so etwas haben:

Multi-line Git commit message in PowerShell

Der Screenshot stammt von einem Beispiel, das ich mit PowerShell mit Poshgit erstellt habe.

85
Jon Crowell

Etwas machen wie

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 in Ihrem PATH einen git-commitlb -Befehl eingerichtet, der ungefähr so ​​funktioniert:

#!/bin/bash

message=$1

git commit -m"$(echo -e "$message")"

Und benutze es so:

git commitlb "line1\nline2\nline3"

Ich habe das Gefühl, dass die allgemeine Konvention eine zusammenfassende Zeile als erste Zeile und dann zwei Zeilenumbrüche und dann eine erweiterte Nachricht in der Commit-Nachricht enthält. Sie könnten natürlich tun:

git commitlb "line1\n\nline2\nline3"
42
Peter Farmer

Ich hoffe das führt nicht zu weit weg von der geposteten Frage, aber setzt den Standardeditor und benutzt dann

git commit -e

könnte viel komfortabler sein.

35
Tobse

Von Git-Dokumentation :

-m <msg>
- message = <msg>
Verwenden Sie die angegebene <msg> als Commit-Nachricht. Wenn mehrere -m -Optionen angegeben werden, werden ihre Werte als separate Absätze verkettet.

Wenn Sie also mehrere Commit-Nachrichten gruppieren möchten, sollte dies die Arbeit erledigen:

git commit -m "commit message1" -m "commit message2"
34
Saravanan M

Es ist nicht nötig, das Zeug zu komplizieren. Nach dem -m "text... wird die nächste Zeile durch Drücken von erreicht Enter. Wann Enter gedrückt wird > erscheint. Wenn Sie fertig sind, geben Sie einfach " ein und drücken Sie 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:   Mon Oct 9 13:30:26 2017 +0200

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 ...
22
blongho

Ich verwende zsh auf einem Mac und kann mehrzeilige Festschreibungsnachrichten in doppelten Anführungszeichen (") posten. 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 .

19
Abizern

In Bash/Zsh können Sie in Anführungszeichen einfach wörtliche Zeilenumbrüche verwenden:

git commit -m 'Multi-line
commit
message'

ANSI-C-Anführungszeichen funktioniert auch in Bash/Zsh:

git commit -m $'Multi-line\ncommit\nmessage'

Sie können Git auch anweisen, einen Editor Ihrer Wahl zum Bearbeiten der Commit-Nachricht zu verwenden. Ab den Dokumenten git-commit :

Der zum Bearbeiten der Commit-Protokollnachricht verwendete Editor wird aus der Umgebungsvariablen GIT_EDITOR, der Konfigurationsvariablen core.editor, der Umgebungsvariablen VISUAL oder der Umgebungsvariablen EDITOR ( in dieser Reihenfolge). Siehe git-var für Details.

8
Eugene Yarmash

Wenn Sie Bash verwenden, drücken Sie C-x C-e (Ctrl+xCtrl+e), und der aktuelle Befehl wird in Ihrem bevorzugten Editor geöffnet.

Sie können den bevorzugten Editor ändern, indem Sie VISUAL und EDITOR anpassen.

Das habe ich in meinem .bashrc:

export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export Sudo_EDITOR='emacsclient -t'

Persönlich finde ich es am einfachsten, Commit-Nachrichten nachträglich in vi (oder einem beliebigen Git-Editor) zu ändern, anstatt in der Befehlszeile, indem Sie git commit --amend direkt nach git commit ausführen. .

5
amphibient

Hier ist eine Liste von fehlgeschlagenen Lösungen unter Windows mit der standardmäßigen cmd.exe-Shell (um Ihnen 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^Enter _World'_ scheint zu funktionieren, weil es "More?" fragt und erlaubt, eine neue Zeile zu schreiben, aber schließlich, wenn es _git log_ Sie werden sehen, dass es sich immer noch um eine einzeilige Nachricht handelt ...

TL; DR: Auch wenn das Kommandozeilen-Parsing unter Windows anders funktioniert und _^_ mehrzeilige Eingaben zulässt, hilft es hier nicht.

Schließlich ist git commit -e wahrscheinlich die beste Option.

1
Basj

Leider scheint git kein Newline-Zeichen in seiner Nachricht zuzulassen. Es gibt bereits oben verschiedene sinnvolle Lösungen, aber beim Schreiben von Skripten sind diese ärgerlich. Hier funktionieren auch Dokumente, sind aber möglicherweise etwas zu nervig, um damit umzugehen (man denke an Yaml-Dateien).

Folgendes habe ich getan:

git commit \
    --message "Subject" \
    --message "First line$(echo)Second line$(echo)Third Line"

Dies ist zwar auch immer noch hässlich, ermöglicht 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.

1
oliver