Wie kann ich Git-Commit-Nachrichten in mehrere Zeilen aufteilen?

Lesezeit: 5 Minuten

Benutzer-Avatar
Fernando

Wenn ich benutze git log Um meine Commit-Erklärung zu überprüfen, möchte ich, dass es so aussieht:

1. what I changed
2. blank line
3. why I changed it

…in 3 Zeilen zu sein, nicht in 1 so:

1. what i changed  2. blank line 3. why i changed

Jedoch, git log zeigt es in einer Zeile. Also, wie bekomme ich das mit git commit -m?

  • Können Sie ein Beispiel für einen Ihrer Commits geben?

    – GabrielOshiro

    29. April 2015 um 2:42 Uhr

  • Sie können Ihre Commit-Nachrichten umbasieren und ändern, um die neuen Zeilen hinzuzufügen, oder Sie können das letzte Commit über bearbeiten git commit --amend

    – Stalker

    29. April 2015 um 2:44 Uhr

  • Was ist Ihr Betriebssystem? Wie hast du Git installiert?

    – Chris

    29. April 2015 um 3:12 Uhr

  • duplizieren stackoverflow.com/questions/5064563/…

    – Scott Sosna

    29. April 2015 um 3:17 Uhr

  • Mögliches Duplikat von Add line break to git commit -m from command line

    – phuklv

    14. Februar 2017 um 10:34 Uhr

Sie verwenden einfach den folgenden Befehl:

$ git commit -m "1. what i changed
> 2. blank line
> 3. why i changed"

Drücken Sie in Ihrem Terminal einfach die Eingabetaste für eine neue Zeile. Die Commit-Nachricht endet erst, wenn Sie das schließende Zitat hinzufügen. Das Git-Protokoll sieht folgendermaßen aus:

$ git log
commit abcde2f660c707br2d20411581c4183170c3p0c2
Author: Alex Pan <[email protected]>
Date:   Tue Apr 28 20:52:44 2015 -0700

    1. what i changed
    2. blank line
    3. why i changed

  • Wie behebe ich das mit interaktivem Rebase? Wenn ich dasselbe Verfahren wie bei commit -m mache, erhalte ich eine Fehlermeldung, dass sich in einer Zeile ein unbekannter Befehl befindet. Ich versuche, meine Commit-Nachricht neu zu formulieren, da sie “Test\nTest” anstelle eines tatsächlichen Zeilenumbruchzeichens war, das buchstäblich “\n” lautete.

    – AgentM

    27. Juni 2018 um 21:44 Uhr

  • Wenn ich auf einem Windows-Computer die Eingabetaste drücke, wird die Commit-Nachricht abgeschnitten. Es wartet nicht auf ein Schlusskurs.

    – David Diaz

    4. Mai 2020 um 20:46 Uhr

  • Dies funktioniert nicht auf Mac. Zumindest für mich.

    – Walter Monecke

    24. Februar 2021 um 22:09 Uhr

Benutzer-Avatar
Oletaranenko

Verwenden Sie zwei --message/-m Optionen, die erste für das Thema und die zweite für den Körper.

Auszug aus Dokumentation:

-m <msg>

--message=<msg>

Verwenden Sie das Gegebene als Commit-Nachricht. Wenn mehrere -m-Optionen angegeben werden, werden ihre Werte als separate Absätze verkettet.

In Ihrem Fall macht es genau das, was Sie wollen, fügt eine Leerzeile zwischen der ersten und der zweiten Zeile ein.

git commit -m "Subject: what I changed" -m "Body: why I changed it"

Dies ist nützlich, wenn Sie zuvor hinzugefügte Kommentare ändern möchten.

  • +1 Ich wollte nur erwähnen, dass in Github der erste Kommentar als Haupt-Commit-Nachricht und der zweite als Beschreibung (mit kleinerer Schrift) angezeigt wird.

    – Hamed2005

    2. August 2019 um 15:31 Uhr

  • Aus irgendeinem Grund erlaubte mir meine Konsole nicht, die Eingabetaste zu drücken, also entschied ich mich stattdessen für diese Lösung.

    – Semmel

    18. Januar 2021 um 11:12 Uhr

Das von Ihnen beschriebene mehrzeilige Format ist das empfohlene mit Git (siehe DISKUSSION in die Dokumentation von git commit). Der einfachste Weg, dies zu tun, ist die Verwendung git commit ohne -mund schreiben Sie Ihre Nachricht in Ihren Texteditor.

Benutzer-Avatar
jaronyogev

Ich finde es viel einfacher, die Commit-Nachricht in einer Datei zu speichern und dann die Option -F zu verwenden.

Beispiel:

$ cat > /tmp/commit_msg.txt
DE123 bug fix: incorrect fetching of instance details
- fixed this and that
- also did such and such
$ git commit -F /tmp/commit_msg.txt

Sie könnten auch einen Editor verwenden, um die Nachrichtendatei vor dem Festschreiben zu bearbeiten.

Anstatt eine temporäre Datei zu verwenden, wenn Sie versuchen, dies programmgesteuert zu tun, können Sie stdin verwenden

git commit -F-

Schreiben Sie dann die Nachricht an stdin

  • Die Verwendung einer Datei erleichtert die Aufbereitung des Textes mit einem Editor. Ich habe cat nur verwendet, um alles im CLI-Kontext sichtbar zu halten …

    – jaronyogev

    1. Juni 2016 um 10:07 Uhr


  • Beispiel dafür, falls sich jemand fragt: echo "$my_multiline_var" | git commit -F-

    – Chris Deacy

    3. Oktober 2019 um 22:07 Uhr

  • @tony-brix trotzdem, um dies sowohl für ein Subjekt als auch für einen Körper zu tun?

    – Onlineausgaben

    12. Februar um 17:32 Uhr

  • @onlinespending Ich glaube, das Thema ist nur die erste Zeile des Commit und der Körper ist der Rest. Auf einigen Plattformen benötigen Sie möglicherweise eine Leerzeile zwischen Betreff und Text.

    – Toni Brix

    15. Februar um 4:45 Uhr

  • @tony-brix keine Möglichkeit, zwei -F- Optionen bereitzustellen. darum ging es mir. Ich musste den Weg gehen, die beiden Nachrichten als Umgebungsvariablen zu speichern und “bash -c” aus meinem Python-Skript zu verwenden

    – Onlineausgaben

    15. Februar um 16:43 Uhr

Ich musste ein Bash-Skript haben, das mehrzeilige Git-Commits für mich ausführt, also sind hier zwei Optionen, die mir eingefallen sind:

  1. Schreiben Sie in eine temporäre Datei und übergeben Sie dann den Inhalt der Datei als Nachricht:

     printf "first line\nsecond line\nthird line" > "file.txt"
     git commit -F "file.txt"
    
  2. (Mein bevorzugter Ansatz): In eine temporäre Variable schreiben und dann mit dem Inhalt der Variablen als Nachricht festschreiben. Beachten Sie, dass die Anführungszeichen herum $MSG wenn Sie einen Befehl ausführen, um den Inhalt der Variablen abzurufen erforderlich! Ohne sie verlieren Sie Ihre Zeilenumbrüche.

     MSG="$(printf "first line\nsecond line\nthird line")"
     git commit -m "$MSG"
    

Als Erweiterung dieses zweiten Ansatzes ist dies auch möglich, falls Sie die Nachricht in mehreren Teilen oder Schritten skripten müssen. ACHTUNG aber! Beachten Sie, wo ich meinen Zeilenumbruch platziere (\n) Figuren. Ich platziere sie NICHT am Ende von irgendwelchen printf Schnur. Denn wenn ich es tue, werden sie es tun verschlungen werdenweil bash automatisch entfernt irgendwelche nachlaufend Zeilenumbruchzeichen, weil es so dumm ist. Also, machen Sie es stattdessen so, was gut funktioniert:

    MSG="$(printf "first line")"
    MSG="$(printf "${MSG}\nsecond line")"
    MSG="$(printf "${MSG}\nthird line")"
    git commit -m "$MSG"

Probe git log Ausgabe von einem der oben genannten git commits:

commit e1983659c6ae2e9d2eb4332657329837582fc32b (HEAD -> master)
Author: Gabriel Staples <[email protected]>
Date:   Tue Mar 24 00:55:31 2020 -0700

    first line
    second line
    third line

Verweise:

  1. Unix & Linux: „Warum verschlingt Shell Command Substitution ein abschließendes Newline-Zeichen?“
  2. SEHR HILFREICH! ==> Wie kann ich einen Zeilenumbruch in einer Zeichenfolge in sh haben? <==

  • Die Verwendung einer Datei erleichtert die Aufbereitung des Textes mit einem Editor. Ich habe cat nur verwendet, um alles im CLI-Kontext sichtbar zu halten …

    – jaronyogev

    1. Juni 2016 um 10:07 Uhr


  • Beispiel dafür, falls sich jemand fragt: echo "$my_multiline_var" | git commit -F-

    – Chris Deacy

    3. Oktober 2019 um 22:07 Uhr

  • @tony-brix trotzdem, um dies sowohl für ein Subjekt als auch für einen Körper zu tun?

    – Onlineausgaben

    12. Februar um 17:32 Uhr

  • @onlinespending Ich glaube, das Thema ist nur die erste Zeile des Commit und der Körper ist der Rest. Auf einigen Plattformen benötigen Sie möglicherweise eine Leerzeile zwischen Betreff und Text.

    – Toni Brix

    15. Februar um 4:45 Uhr

  • @tony-brix keine Möglichkeit, zwei -F- Optionen bereitzustellen. darum ging es mir. Ich musste den Weg gehen, die beiden Nachrichten als Umgebungsvariablen zu speichern und “bash -c” aus meinem Python-Skript zu verwenden

    – Onlineausgaben

    15. Februar um 16:43 Uhr

1310960cookie-checkWie kann ich Git-Commit-Nachrichten in mehrere Zeilen aufteilen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy