Tambahkan jeda baris ke 'git commit -m' dari baris perintah

746

Saya menggunakan Git dari baris perintah dan saya mencoba menambahkan jeda baris ke pesan komit (menggunakan git commit -m "") tanpa pergi ke Vim.

Apakah ini mungkin?

Alan Whitelaw
sumber
6
Sebagai catatan, inilah tautan yang merangkum konvensi pesan komit yang baik - github.com/erlang/otp/wiki/Writing-good-commit-messages jika itu membantu seseorang.
WeirdElfB0y
5
Sesuatu seperti GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -eakan membantu Anda menghindari vim.
jotik

Jawaban:

694

Tentu saja, bagaimana ini dilakukan tergantung pada shell Anda. Di Bash, Anda dapat menggunakan tanda kutip tunggal di sekitar pesan dan membiarkan tanda kutip terbuka, yang akan membuat Bash meminta baris lain, sampai Anda menutup tanda kutip. Seperti ini:

git commit -m 'Message

goes
here'

Atau, Anda dapat menggunakan "dokumen di sini" (juga dikenal sebagai heredoc):

git commit -F- <<EOF
Message

goes
here
EOF
Simon Richter
sumber
53
@Peter Farmer kemudian menjawab bahwa konvensi Git tampaknya seperti: 1 baris untuk ringkasan, dua baris, kemudian pesan terperinci.
Nick Spacek
4
Juga, lihat posting di bawah ini oleh @esse. Kembalinya kereta yang sederhana akan membantu.
Hakan Ensari
6
@MohamadAli, pada Windows, parsing commandline bekerja secara berbeda
Simon Richter
2
@KelvinShadewing, ya, tetapi dengan perbedaan yang berlaku aturan substitusi shell untuk pesan, jadi Anda perlu melarikan diri tanda dolar dan karakter metakarakter lainnya. Di sisi lain itu memungkinkan Anda untuk menggunakan variabel.
Simon Richter
2
@ Nikhil, banyak program mendukung tanda hubung tunggal sebagai nama file yang berarti stdin atau stdout. Dengan dokumen di sini , gitperintah dapat membaca teks pesan dari stdin, dan -Fopsi memberi nama file untuk membaca pesan.
Simon Richter
515

Jika Anda hanya ingin, katakanlah, baris utama dan baris konten, Anda dapat menggunakan:

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

Perhatikan bahwa ini membuat paragraf terpisah - bukan baris. Jadi akan ada garis kosong antara masing-masing dua -mgaris, misalnya:

My head line

My content line.
Simon
sumber
80
Ini memiliki manfaat bekerja pada Windows di mana trik mengutip yang disebutkan di tempat lain tidak berfungsi. Pisahkan -muntuk setiap baris. Bagus!
ddotsenko
8
Pesan yang dibuat menggunakan metode ini ditampilkan dengan benar di GitHub, GitHub untuk Windows dan TortoiseGit.
Richard
12
@ddotsenko ini adalah manfaat dari bekerja di Linux / Mac, di mana kami memiliki shell yang layak =)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
7
Dari man git commit: -m <msg>, --message = <msg> Gunakan <msg> yang diberikan sebagai pesan komit. Jika opsi multiple -m diberikan, nilainya akan digabungkan sebagai paragraf terpisah.
Amedee Van Gasse
55
Perhatikan bahwa ini membuat paragraf terpisah - bukan baris. Jadi akan ada garis kosong antara masing-masing dua -mgaris.
Ohad Schneider
398

Menggunakan Git dari baris perintah dengan Bash Anda dapat melakukan hal berikut:

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

Cukup ketik dan tekan Enterketika Anda menginginkan baris baru, simbol ">" berarti Anda telah menekan Enter, dan ada baris baru. Jawaban lain juga berfungsi.

esse
sumber
6
Jawaban Abizern menjelaskan mengapa hal ini berhasil - Bash shell menginterpretasikan kunci <kbd> Enter </kbd> sebagai baris baru hingga karakter kutipan ganda pertama 'tertutup' (dengan karakter kutipan ganda berikutnya).
Kenny Evitt
1
Saya harus setuju bahwa ini adalah solusi yang jauh lebih efektif, lebih mudah dan praktis daripada jawaban yang diterima. Ini bekerja dengan baik untuk saya menggunakan Git 1.8.2.1. +1 dari saya.
crmpicco
Ini bukan fungsi khusus dari tombol Enter , melainkan terkait dengan tanda kutip. Apakah Anda menggunakan tanda kutip ganda atau tunggal tidak terlalu penting, kecuali untuk ekspansi variabel dan keluar dari karakter khusus - itu sebabnya saya memilih tanda kutip tunggal dalam jawaban saya.
Simon Richter
2
Jangan gunakan ini di zsh! Terminal akan ditutup dan Anda kehilangan apa yang Anda ketikkan.
laike9m
3
Bekerja di Gitbash untuk Windows.
Omar Tariq
111

Anda harus bisa menggunakannya

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

Dari manual Bash :

Kata-kata dalam bentuk $ ' string ' diperlakukan secara khusus. Kata diperluas ke string , dengan karakter backslash-escaped diganti sebagaimana ditentukan oleh standar ANSI C.

Ini termasuk dukungan untuk baris baru seperti yang ditunjukkan di atas, ditambah kode hex dan Unicode dan lainnya. Buka bagian yang ditautkan untuk melihat daftar karakter yang lolos dari garis miring terbalik.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
@rsy: Bash versi apa yang Anda gunakan? Apa yang Anda lihat saat melakukannya echo $'one\ntwo'?
Dijeda sampai pemberitahuan lebih lanjut.
1
rsy $ bash --versi GNU bash, versi 3.2.53 (1) -release (x86_64-apple-darwin13) Hak Cipta (C) 2007 Free Software Foundation, Inc. Output dari perintah itu, seperti yang diharapkan, ditampilkan dalam dua berbeda garis!
ccoutinho
untuk saya di windows 7 itu pilihan terbaik Terima kasih
Mohamad Ali
2
$ Adalah kunci di sini dan saya tidak melihatnya pada pandangan pertama. Kalau tidak, saya hanya mendapatkan \ n di tengah pesan saya.
ChrisBob
1
Anda bahkan tidak perlu menggunakan $ '...' untuk seluruh string; menggunakan ini hanya sekitar karakter baris baru akan bekerja: git commit -m "first line"$'\n'"second line". Perhatikan bahwa Anda harus menutup string sebelumnya sebelum memulai $'string'.
PlasmaBinturong
95

Menambahkan jeda baris ke komit Git Anda

Coba yang berikut ini untuk membuat pesan komit multi-baris:

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

Kemudian verifikasi apa yang telah Anda lakukan:

git log -1

Anda harus berakhir dengan sesuatu seperti ini:

Pesan komit Multi-line Git di PowerShell

Tangkapan layar berasal dari contoh yang saya atur menggunakan PowerShell with Poshgit.

Jon Crowell
sumber
7
Jawaban yang luar biasa. Saya sudah mencari-cari sejak lama dan mencoba berbagai cara untuk memformat pesan komit Git saya, tetapi ini yang terbaik. Saya dapat mengkonfirmasi itu berfungsi pada prompt dengan Git 1.8.2.1.
crmpicco
1
Di Powershell Anda dapat melakukan `n untuk break line
Ecropolis
2
Ini sangat berhasil bagi saya di Git Bash untuk Windows .
Ulysses Alves
1
Ini harus menjadi jawaban yang dipilih karena ini adalah metode yang paling kompatibel, ini tidak bergantung pada prompt CLI tertentu seperti yang dilakukan beberapa saran lainnya ..
1
Ini adalah jawaban yang lebih baik dan harus dipilih sebagai jawabannya. Tidak hanya ini sejalan sebagai perilaku default, dan memberikan pesan komit jauh lebih bersih tetapi juga agak lebih fleksibel dengan multi-m. Juga meskipun terlihat khusus windows dan telah menarik komentar terkait windows, ia berfungsi dengan baik di Linux juga.
0xc0de
44

Melakukan sesuatu seperti

git commit -m"test\ntest"

tidak bekerja, tetapi sesuatu seperti

git commit -m"$(echo -e "test\ntest")"

bekerja, tapi itu tidak terlalu cantik. Anda mengatur git-commitlbperintah di PATHmana Anda melakukan sesuatu seperti ini:

#!/bin/bash

message=$1

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

Dan gunakan seperti ini:

git commitlb "line1\nline2\nline3"

Kata peringatan, saya merasa bahwa konvensi umum adalah memiliki garis ringkasan sebagai baris pertama, dan kemudian dua baris terputus, dan kemudian pesan yang diperluas dalam pesan komit, jadi melakukan sesuatu seperti ini akan merusak konvensi itu. Tentu saja Anda bisa:

git commitlb "line1\n\nline2\nline3"
Peter Farmer
sumber
8
Yang terakhir adalah konvensi umum yang membuat saya melihat ke bawah ke rute ini. Terima kasih
Alan Whitelaw
39

Dari dokumentasi Git :

-m <msg>
--message = <msg>
Gunakan yang diberikan <msg> sebagai pesan komit. Jika beberapa -mopsi diberikan, nilainya digabungkan sebagai paragraf terpisah.

Jadi, jika Anda mencari untuk mengelompokkan beberapa pesan komit, ini harus dilakukan:

git commit -m "commit message1" -m "commit message2"
Saravanan M
sumber
Solusi agnostik (shell-independent). Terima kasih untuk ini. Kita perlu RTFM :)
Mat M
38

Saya harap ini tidak mengarah terlalu jauh dari pertanyaan yang diposting, tetapi mengatur editor default dan kemudian menggunakan

git commit -e

mungkin jauh lebih nyaman.

Tobse
sumber
2
Yang ini harus menjadi yang terbaik.
hxpax
5
Anda dapat meninggalkan -edan masih akan membuka editor
djangonaut
Yang ini adalah jawaban yang saya cari.
Tinmarino
28

Tidak perlu menyulitkan barang. Setelah -m "text...baris berikutnya didapat dengan menekan Enter. Saat Enterditekan >muncul. Setelah selesai, cukup "tekan dan tekan 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 ...
blongho
sumber
1
Jawaban ini tidak mendapatkan cukup cinta!
cBlaine
1
Ini adalah jawaban yang bagus, baris baru ditampilkan dengan benar di Github. Baris pertama ditampilkan sebagai tajuk.
Yogesh Umesh Vaity
18

Saya menggunakan zsh pada Mac, dan saya dapat memposting pesan komit multi-baris dalam tanda kutip ganda ("). Pada dasarnya saya terus mengetik dan menekan kembali untuk baris baru, tetapi pesan itu tidak dikirim ke Git sampai saya menutup tanda kutip dan kembali .

Abizern
sumber
7
Anda dapat melakukan hal yang sama di bash.
Peter Farmer
17

Di Bash / Zsh Anda cukup menggunakan jeda baris literal di dalam tanda kutip:

git commit -m 'Multi-line
commit
message'

Mengutip ANSI-C juga berfungsi di Bash / Zsh:

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

Anda juga dapat menginstruksikan Git untuk menggunakan editor pilihan Anda untuk mengedit pesan komit. Dari dokumen pada git-commit :

Editor yang digunakan untuk mengedit pesan log komit akan dipilih dari GIT_EDITORvariabel lingkungan, core.editorvariabel konfigurasi, VISUALvariabel lingkungan, atau EDITOR variabel lingkungan (dalam urutan itu). Lihat git-var untuk detailnya.

Eugene Yarmash
sumber
5

Secara pribadi, saya merasa paling mudah untuk mengubah pesan komit setelah fakta di vi(atau apa pun pilihan editor git Anda) daripada di baris perintah, dengan melakukan git commit --amendsetelahnya git commit.

amfibi
sumber
6
Anda dapat mencapai hasil yang sama ini tanpa harus mengubah dengan hanya menggunakan git commit -e.
Nathan Hinchey
4
Atau sederhananya git commit, dan itu akan membuka editor dengan templat pesan komit.
Jim Stewart
5

Jika Anda menggunakan Bash, tekan C-x C-e( Ctrl+ x Ctrl+ e), dan itu akan membuka perintah saat ini di editor pilihan Anda.

Anda dapat mengubah editor yang disukai dengan men VISUAL- tweak dan EDITOR.

Itu yang saya miliki di .bashrc:

export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'
Aleks-Daniel Jakimenko-A.
sumber
1
Jadi mengapa ada orang yang menurunkan ini? Ini adalah cara paling nyaman untuk bekerja dengan perintah multiline di bash, Anda hanya perlu mengkonfigurasinya dengan benar sekali. Saya telah menggunakan saran bodoh lainnya yang ditunjukkan dalam jawaban lain di sini, tetapi begitu Anda belajar mengedit perintah di editor teks favorit Anda, tidak ada jalan kembali.
Aleks-Daniel Jakimenko-A.
1
Ini sangat berguna memilukan saya tidak bisa percaya saya menjalani tahun-tahun terakhir saya tanpa ini.
SoonDead
2

Berikut adalah daftar solusi gagal pada Windows dengan shell cmd.exe standar (untuk menghemat waktu percobaan-dan-kesalahan!):

  • git commit -m 'Hello Enter tidak berfungsi: tidak akan meminta baris baru

  • git commit -m "Hello Enter idem

  • git commit -m "Hello^ Enter idem

  • git commit -m 'Hello^ Enter World'sepertinya bekerja karena meminta "Lebih banyak?" dan memungkinkan untuk menulis baris baru, tetapi akhirnya ketika melakukan git logAnda akan melihat bahwa itu masih pesan satu baris ...

TL; DR: Sekalipun di Windows, penguraian baris perintah berfungsi berbeda , dan ^memungkinkan input multiline, itu tidak membantu di sini.

Akhirnya git commit -emungkin merupakan pilihan terbaik.

Basj
sumber
Hanya saja, jangan gunakan alasan sedih, sedih untuk penawaran "shell" windows.
jthill
2

Sayangnya, git tampaknya tidak mengizinkan karakter baris baru dalam pesannya. Ada berbagai solusi masuk akal yang sudah di atas, tetapi ketika membuat skrip, itu menjengkelkan. Di sini dokumen juga berfungsi, tetapi mungkin juga agak menjengkelkan untuk ditangani (pikirkan file yaml)

Inilah yang saya lakukan:

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

Meskipun ini juga masih jelek, ini memungkinkan untuk 'one-liners' yang mungkin masih berguna. Karena biasanya string adalah variabel atau dikombinasikan dengan variabel, uglynes dapat dijaga agar tetap minimum.

oliver
sumber
1

Saya tidak melihat ada yang menyebutkan bahwa jika Anda tidak memberikan pesan itu akan membuka nano untuk Anda (setidaknya di Linux) di mana Anda dapat menulis beberapa baris ...

Hanya ini yang dibutuhkan:

git commit
Rodrigo Graça
sumber