Komut satırından 'git commit -m' satır sonu ekle


746

Git'i komut satırından kullanıyorum git commit -m ""ve Vim'e girmeden işlem mesajına (kullanarak ) satır sonu eklemeye çalışıyorum .

Mümkün mü?


6
Bir not olarak, iyi taahhüt mesajı kurallarını özetleyen bir bağlantı - birisine yardım ederse github.com/erlang/otp/wiki/Writing-good-commit-messages .
16:25

5
Gibi bir şey GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -ekaçınmanıza yardımcı olacaktır vim.
jotik

Yanıtlar:


694

Kesinlikle, nasıl yapıldığı kabuğunuza bağlıdır. Bash'te, iletinin etrafında tek tırnak işaretleri kullanabilir ve teklifi kapatana kadar teklifi başka bir satır için Bash istemine neden olacak şekilde açık bırakabilirsiniz. Bunun gibi:

git commit -m 'Message

goes
here'

Alternatif olarak, bir "burada belge" (heredoc olarak da bilinir) kullanabilirsiniz:

git commit -F- <<EOF
Message

goes
here
EOF

53
@Peter Farmer'ın daha sonra verdiği yanıt, Git kuralının görünüşe göre şuna benziyor: Özet için 1 satır, iki satır sonu, sonra ayrıntılı bir mesaj.
Nick Spacek

4
Ayrıca, @esse tarafından yazılan aşağıya bakınız. Basit bir araba dönüşü hile yapar.
Hakan Ensari

6
@MohamadAli, Windows üzerinde, komut satırı ayrıştırma farklı
Simon Richter

2
@KelvinShadewing, evet, ancak kabuk değiştirme kurallarının mesaja uyguladığı farkla, dolar işaretleri ve diğer meta karakterlerden kaçmanız gerekir. Öte yandan değişkenleri kullanmanıza izin verir.
Simon Richter

2
@Nikhil, birçok program stdin veya stdout anlamına gelen dosya adı olarak tek bir tireyi destekler. Bu belgede , gitkomut stdin'den mesaj metnini okuyabilir ve -Fseçenek mesajı okumak için dosya adını verir.
Simon Richter

514

Sadece bir başlık satırı ve bir içerik satırı istiyorsanız şunu kullanabilirsiniz:

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

Bunun satırlar değil, ayrı paragraflar oluşturduğunu unutmayın. Yani her iki satır arasında boş bir satır olacaktır -m, örneğin:

My head line

My content line.

80
Bu, başka bir yerde bahsedilen alıntı hilelerin işe yaramadığı Windows üzerinde çalışma avantajına sahiptir. Ayrı -mher satır için. Güzel!
ddotsenko

8
Bu yöntem kullanılarak oluşturulan iletiler GitHub, Windows için GitHub ve TortoiseGit'te doğru şekilde görüntülenir.
Richard

12
@ddotsenko bu iyi bir kabuk var Linux / Mac üzerinde çalışmanın yararı =)
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

7
Kimden man git commit: -m <msg>, --message = <msg> Teslim mesajı olarak verilen <msg> 'yi kullanın. Birden fazla -m seçeneği belirtilirse, değerleri ayrı paragraflar olarak birleştirilir.
Amedee Van Gasse

55
Bunun satırlar değil , ayrı paragraflar oluşturduğunu unutmayın . Yani her iki satır arasında boş bir satır olacak -m.
Ohad Schneider

398

Git'i komut satırından Bash ile kullanarak aşağıdakileri yapabilirsiniz:

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

EnterYeni bir satır istediğinizde yazmanız ve basmanız yeterlidir , ">" sembolü bastığınız anlamına gelir Enterve yeni bir satır vardır. Diğer cevaplar da işe yarıyor.


6
Abizern'in cevabı bana bunun neden işe yaradığını açıkladı - Bash kabuğu, bir <kbd> Enter </kbd> tuş basışını ilk çift tırnak karakteri 'kapalı' olana kadar (sonraki çift tırnak karakteriyle) yeni bir satır olarak yorumlar.
Kenny Evitt

1
Bunun kabul edilen cevaptan çok daha etkili, daha kolay ve pratik bir çözüm olduğu konusunda hemfikirim. Git 1.8.2.1'i kullanmak benim için iyi çalışıyor. Benden +1.
crmpicco

Bu, Enter tuşunun özel bir işlevi değil, tırnak işaretleri ile ilgilidir. Değişken genişleme ve kaçan özel karakterler dışında çift veya tek tırnak kullanmak fark etmez - bu yüzden cevabımda tek tırnak seçtim.
Simon Richter

2
Bunu zsh'de kullanmayın! Terminal kapanacak ve yazdıklarınızı kaybedeceksiniz.
laike9m

3
Windows için Gitbash'te çalışır.
Omar Tariq

111

Kullanabilmelisin

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

Gönderen Bash kılavuzda :

$ ' String ' biçimindeki kelimeler özel olarak ele alınır. Sözcük dizeye genişler , ters eğik çizgiden kaçan karakterler ANSI C standardında belirtildiği gibi değiştirilir.

Bu, yukarıda gösterildiği gibi yeni satırların yanı sıra hex ve Unicode kodları ve diğerlerini de içerir. Ters eğik çizgiden kaçan karakterlerin bir listesini görmek için bağlantılı bölüme gidin.


@rsy: Hangi Bash sürümünü kullanıyorsunuz? Ne zaman görüyorsun echo $'one\ntwo'?
sonraki duyuruya kadar duraklatıldı.

1
rsy $ bash - sürüm GNU bash, sürüm 3.2.53 (1) -çalışma (x86_64-apple-darwin13) Telif Hakkı (C) 2007 Free Software Foundation, Inc. Bu komutun çıktısı beklendiği gibi iki farklı şekilde gösteriliyor çizgiler!
ccoutinho

Windows 7'de benim için en iyi seçenek Teşekkür ederim
Mohamad Ali

2
$ Burada anahtar ve ilk glace fark etmedi. Aksi takdirde mesajımın ortasında bir \ n alırım.
Ocak 17'de ChrisBob

1
Dizenin tamamı için $ '...' bile kullanmak zorunda değilsiniz; Sadece satır karakteri etrafında bu kullanarak çalışır: git commit -m "first line"$'\n'"second line". Başlamadan önce bir önceki dizeyi kapatmanız gerektiğini unutmayın $'string'.
PlasmaBinturong

95

Git taahhüdünüze satır sonları ekleme

Çok satırlı bir taahhüt mesajı oluşturmak için aşağıdakileri deneyin:

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

Ardından ne yaptığınızı doğrulayın:

git log -1

Böyle bir şeyle sonuçlanmalısın:

PowerShell'de çok satırlı Git tamamlama mesajı

Ekran görüntüsü, Poshgit ile PowerShell kullanarak kurduğum bir örnekten.


7
Müthiş cevap. Bunu uzun zamandır araştırdım ve Git taahhüdü mesajlarımı biçimlendirmek için birçok farklı yol denedim, ancak bu en iyi şekilde çalışıyor. Git 1.8.2.1 ile istemde çalıştığını onaylayabilirim.
crmpicco

1
Powershell'de satır sonu için `n yapabilirsiniz
Ecropolis

2
Windows için Git Bash'te benim için çok çalıştı .
Ulysses Alves

1
Bu en uyumlu yöntem olduğu için seçilen cevap olmalıdır , bu diğer bazı önerileri gibi herhangi bir CLI istemi dayanmaz ..

1
Bu daha iyi bir cevaptır ve cevap olarak seçilmelidir. Sadece bu varsayılan bir davranış olarak değil aynı zamanda daha temiz bir kesinleştirme mesajı sağlar, aynı zamanda çoklu -m ile biraz daha esnektir. Ayrıca Windows'a özgü görünse ve pencerelerle ilgili yorumları çekmiş olsa da, Linux'ta da iyi çalışır.
0xc0de

44

Gibi bir şey yapmak

git commit -m"test\ntest"

çalışmıyor, ama benzeri bir şey

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

çalışıyor, ama çok hoş değil. İçinde böyle bir şey yapan bir git-commitlbkomut ayarladın PATH:

#!/bin/bash

message=$1

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

Ve şu şekilde kullanın:

git commitlb "line1\nline2\nline3"

Uyarı kelimesi, genel kuralın ilk satır olarak bir özet satırı ve sonra iki satır sonu ve daha sonra tamamlama mesajında ​​genişletilmiş bir mesaj olması olduğunu hissediyorum, bu yüzden böyle bir şey yapmak bu kuralı kıracaktır. Elbette şunları yapabilirsiniz:

git commitlb "line1\n\nline2\nline3"

8
+1 beni bu rotayı izleyen genel konvansiyondu. Teşekkürler
Alan Whitelaw

39

Gönderen Git belgelerine :

-m <msg>
--message = <msg> Teslim mesajı
olarak verilen <msg> 'yi kullanın. Birden fazla -mseçenek belirtilirse, değerleri ayrı paragraflar olarak birleştirilir.

Bu nedenle, birden fazla yürütme mesajını gruplamak istiyorsanız, bu işi yapmalıdır:

git commit -m "commit message1" -m "commit message2"

Agnostik çözelti (kabuktan bağımsız). Bunun için teşekkürler. RTFM'ye ihtiyacımız var :)
Mat M


28

İşleri karmaşıklaştırmaya gerek yok. Bir -m "text...sonraki satır tuşuna basılarak elde edilir Enter. Ne zaman Enterbasıldığında >görünür. İşiniz bittiğinde, şunu koyun "ve basın 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 ...

1
Bu cevap yeterince sevgi almıyor!
cBlaine

1
Bu harika bir cevap, Github'da yeni çizgiler doğru bir şekilde gösteriliyor. İlk satır başlık olarak gösterilir.
Yogesh Umesh Vaity

18

Mac'te zsh kullanıyorum ve çift tırnak işaretleri içinde çok satırlı taahhüt mesajları gönderebilirim ("). Temel olarak yeni satırlar için yazmaya ve geri dönmeye devam ediyorum, ancak tırnakları kapatıp geri dönene kadar mesaj Git'e gönderilmiyor .


7
Aynı şeyi bash'ta da yapabilirsiniz.
Peter Farmer

17

Bash / Zsh'de tırnak işaretleri arasında basit satır sonlarını kullanabilirsiniz:

git commit -m 'Multi-line
commit
message'

ANSI-C alıntısı Bash / Zsh'da da çalışır:

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

Git'e, tamamlama mesajını düzenlemek için istediğiniz bir düzenleyiciyi kullanmasını da bildirebilirsiniz. Git-commit üzerindeki dokümanlardan :

İşlem günlüğü iletisini düzenlemek için kullanılan düzenleyici, GIT_EDITORortam değişkeni, core.editoryapılandırma değişkeni, VISUALortam değişkeni veya EDITOR ortam değişkeninden (bu sırayla) seçilecektir . Ayrıntılar için git-var'a bakın.


5

Şahsen ben aslında sonra iletileri işlemek değiştirmek yapmayı daha kolay bulmak viyaparak (ya da seçtiğiniz git editörü neyse) yerine komut satırında daha git commit --amendsonra hemen git commit.


6
Bu sonucu sadece kullanarak değiştirmek zorunda kalmadan elde edebilirsiniz git commit -e.
Nathan Hinchey

4
Ya da basitçe git commit, taahhüt mesajı şablonu olan bir editör açar.
Jim Stewart

5

Bash kullanıyorsanız, C-x C-e( Ctrl+ x Ctrl+ e) düğmesine basın; geçerli komutu tercih ettiğiniz düzenleyicide açar.

Sen verdiği tarafından tercih edilen düzenleyici değiştirebilir VISUALve EDITOR.

Bu benim var .bashrc:

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

1
Öyleyse neden biri bunu küçümsedi? Bu, bash'da çok satırlı komutlarla çalışmanın en uygun yoludur, sadece bir kez yapılandırmanız gerekir. Buradaki diğer yanıtlarda gösterilen diğer aptal önerileri kullanıyorum, ancak en sevdiğiniz metin düzenleyicide komutlarınızı düzenlemeyi öğrendikten sonra geri dönüş yok.
Aleks-Daniel Jakimenko-A.

1
Bu o kadar yürek parçalayıcı bir şekilde faydalı ki, geçmiş yıllarımı bu olmadan yaşadığımı düşünemiyorum.
SoonDead

2

Standart cmd.exe kabuğu ile Windows'ta başarısız çözümlerin listesi ( size deneme-yanılma zamanından tasarruf etmek için!):

  • git commit -m 'Hello Enter çalışmıyor: yeni bir satır istemeyecek

  • git commit -m "Hello Enter aynı yazı

  • git commit -m "Hello^ Enter aynı yazı

  • git commit -m 'Hello^ Enter World'sorar, çünkü çalışmak gibi görünüyor "Daha?" ve yeni bir satır yazmanıza izin verir, ancak son olarak bunu yaparken git loghala tek satırlık bir mesaj olduğunu göreceksiniz ...

TL; DR: Windows'da bile, komut satırı ayrıştırma farklı çalışır ve ^çok satırlı girişe izin verir, burada yardımcı olmaz.

Sonunda git commit -emuhtemelen en iyi seçenektir.


Sadece o "üzgün" pencereler için üzücü, üzgün bahane kullanmayın.
jthill

2

Ne yazık ki git mesajında ​​herhangi bir yeni satır karakterine izin vermiyor gibi görünüyor. Yukarıda çeşitli makul çözümler var, ancak komut dosyası yazarken bunlar can sıkıcı. Burada belgeler de çalışır, ancak başa çıkmak için biraz fazla can sıkıcı olabilir (yaml dosyalarını düşünün)

İşte yaptığım şey:

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

Bu hala çirkin olsa da, yine de yararlı olabilecek 'tek gömleklere' izin verir. Genellikle dizeler değişken olduğu veya değişkenlerle birleştirildiği için, çirkinler minimumda tutulabilir.


1

Bir mesaj vermezseniz sizin için nanoyu açacağını (en azından Linux'ta) birden fazla satır yazabileceğinizi söyleyen kimseyi görmüyorum ...

Sadece buna ihtiyaç vardı:

git commit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.