कमांड लाइन से 'ब्रेक कमिट-मी' में लाइन ब्रेक जोड़ें


746

मैं कमांड लाइन से गिट का उपयोग कर रहा हूं और git commit -m ""विम में जाने के बिना प्रतिबद्ध संदेश (लाइन का उपयोग करके ) में एक लाइन ब्रेक जोड़ने की कोशिश कर रहा हूं ।

क्या यह संभव है?


6
एक नोट के रूप में, यहां एक लिंक है जो अच्छे प्रतिबद्ध संदेश सम्मेलनों को सारांशित करता है - github.com/erlang/otp/wiki/Writing-good-commit-messages यदि यह किसी की मदद करता है।
WeirdElfB0y

5
कुछ GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -eऐसा करने से आपको बचने में मदद मिलेगी vim
जोतिक

जवाबों:


693

निश्चित रूप से, यह कैसे किया जाता है यह आपके शेल पर निर्भर करता है। बैश में, आप संदेश के चारों ओर एकल उद्धरणों का उपयोग कर सकते हैं और बस उद्धरण को खुला छोड़ सकते हैं, जो किसी अन्य पंक्ति के लिए बैश का संकेत देगा, जब तक आप उद्धरण को बंद नहीं करते। ऐशे ही:

git commit -m 'Message

goes
here'

वैकल्पिक रूप से, आप "यहां दस्तावेज़" (जिसे हेरेडोक भी कहा जाता है) का उपयोग कर सकते हैं:

git commit -F- <<EOF
Message

goes
here
EOF

53
@Peter किसान के उत्तर पर बाद में उल्लेख किया गया है कि Git कन्वेंशन जाहिरा तौर पर कुछ इस तरह है: सारांश के लिए 1 लाइन, दो लाइन टूटती है, फिर एक विस्तृत संदेश।
निक स्पेसक

4
इसके अलावा, @esse द्वारा नीचे पोस्ट देखें। एक साधारण गाड़ी वापसी की चाल है।
हकन असेरी

6
@MohamadAli, विंडोज पर, कमांडलाइन पार्सिंग अलग तरीके से
साइमन रिक्टर

2
@KelvinShadewing, हाँ, लेकिन इस अंतर के साथ कि शेल प्रतिस्थापन नियम संदेश पर लागू होते हैं, इसलिए आपको डॉलर के संकेतों और अन्य मेटाचैकर्स से बचने की आवश्यकता है। दूसरी ओर यह आपको चर का उपयोग करने की अनुमति देता है।
साइमन रिक्टर

2
@ निखिल, कई कार्यक्रमों का अर्थ है एक ही डैश का मतलब फ़ाइल नाम के रूप में स्टड या स्टडआउट। साथ यहाँ दस्तावेज़ , gitआदेश stdin से संदेश पाठ पढ़ सकते हैं, और -Fविकल्प फ़ाइल नाम से संदेश को पढ़ने के लिए देता है।
साइमन रिक्टर

513

यदि आप चाहें, तो कहें, एक हेड लाइन और एक कंटेंट लाइन, आप उपयोग कर सकते हैं:

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

ध्यान दें कि यह अलग पैराग्राफ बनाता है - लाइनें नहीं। इसलिए प्रत्येक दो -mलाइनों के बीच एक रिक्त रेखा होगी , जैसे:

My head line

My content line.

80
यह विंडोज पर काम करने का एक फायदा है, जहां कहीं भी उल्लिखित चालें उद्धृत नहीं करते हैं। -mप्रत्येक पंक्ति के लिए अलग । अच्छा!
ddotsenko

8
इस विधि को सही तरीके से GitHub, Windows और TortoiseGit के लिए GitHub का उपयोग करके बनाए गए संदेश।
रिचर्ड

11
@ddotsenko यह लिनक्स / मैक पर काम करने का लाभ है, जहां हमारे पास एक अच्छा शेल है =)
सिरो सेंटिल्ली 审查 i is is

7
से man git commit: -m <msg>, --message = <msg> दिए गए संदेश के रूप में दिए गए <msg> का उपयोग करें। यदि बहु-एम विकल्प दिए जाते हैं, तो उनके मानों को अलग-अलग पैराग्राफ के रूप में संक्षिप्त किया जाता है।
एमी वैन गैंसे

55
ध्यान दें कि यह अलग पैराग्राफ बनाता है - लाइनें नहीं। तो प्रत्येक दो -mलाइनों के बीच एक खाली लाइन होगी ।
ओहद श्नाइडर

398

बैश के साथ कमांड लाइन से गिट का उपयोग करके आप निम्नलिखित कार्य कर सकते हैं:

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

बस टाइप करें और दबाएं Enterजब आप एक नई लाइन चाहते हैं, तो ">" प्रतीक का मतलब है कि आपने दबाया है Enter, और एक नई लाइन है। अन्य उत्तर भी काम करते हैं।


6
Abizern के उत्तर ने मेरे लिए स्पष्ट किया कि यह क्यों काम करता है - बैश शेल एक <kbd> एंटर </ kbd> की-प्रेस को एक नई लाइन के रूप में तब तक दबाता है जब तक कि पहले दोहरे-भाव वाले चरित्र को 'बंद' (बाद के दोहरे-भाव वाले चरित्र के साथ) नहीं किया जाता।
केनी एविट

1
मुझे सहमत होना होगा कि यह एक अधिक प्रभावी, आसान और व्यावहारिक समाधान है जो स्वीकृत उत्तर है। यह Git 1.8.2.1 का उपयोग करके मेरे लिए अच्छी तरह से काम करता है। मुझ से +1।
crmpicco

यह Enter कुंजी का एक विशेष कार्य नहीं है , बल्कि उद्धरणों से संबंधित है। चाहे आप दोहरे या एकल उद्धरणों का उपयोग करें, वास्तव में कोई फर्क नहीं पड़ता, केवल चर विस्तार और विशेष पात्रों से बचने के लिए - यही कारण है कि मैंने अपने उत्तर में एकल उद्धरण चुना है।
साइमन रिक्टर

2
Zsh में यह प्रयोग न करें! टर्मिनल बंद हो जाएगा और आप जो टाइप करेंगे उसे खो देंगे।
laike9m

3
विंडोज के लिए Gitbash में काम करता है।
उमर तारिक

110

आप का उपयोग करने में सक्षम होना चाहिए

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

से बैश मैनुअल :

फॉर्म $ ' स्ट्रिंग ' के शब्दों को विशेष रूप से व्यवहार किया जाता है। यह शब्द ANSI C मानक द्वारा निर्दिष्ट बैकस्लैश-एस्कैप्ड वर्णों के साथ स्ट्रिंग में फैलता है ।

इसमें ऊपर बताए गए अनुसार नईलाइन्स का समर्थन, साथ ही साथ हेक्स और यूनिकोड कोड और अन्य शामिल हैं। बैकस्लैश-एस्कैप्ड कैरेक्टर्स की सूची देखने के लिए लिंक सेक्शन में जाएं।


@rsy: आप किस संस्करण का उपयोग कर रहे हैं? जब आप करते हैं तो आप क्या देखते हैं echo $'one\ntwo'?
अगली सूचना तक रोक दिया गया।

1
rsy $ bash --version GNU bash, संस्करण 3.2.53 (1) -release (x86_64-apple-darwin13) कॉपीराइट (C) 2007 फ्री सॉफ्टवेयर फाउंडेशन, इंक। उस कमांड का आउटपुट जैसा कि अपेक्षित है, दो अलग-अलग में दिखाया गया है। लाइनों!
ccoutinho

मेरे लिए विंडोज़ 7 पर यह सबसे अच्छा विकल्प है
मोहम्मद अली

2
$ यहाँ कुंजी है और मैंने इसे पहली बार में नहीं देखा था। अन्यथा मुझे अपने संदेश के बीच में सिर्फ एक \ n मिलता है।
क्रिसबेक

1
आपको संपूर्ण स्ट्रिंग के लिए $ '...' का उपयोग करने की आवश्यकता नहीं है; इस का उपयोग सिर्फ newline चरित्र के आसपास काम करेगा git commit -m "first line"$'\n'"second line":। बस ध्यान दें कि आपको अपनी शुरुआत करने से पहले पिछले स्ट्रिंग को बंद करना होगा $'string'
प्लाज्माबिन्टॉन्ग

95

अपने Git कमिट में लाइन ब्रेक जोड़ना

एक बहु-पंक्ति प्रतिबद्ध संदेश बनाने के लिए निम्नलिखित प्रयास करें:

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

फिर सत्यापित करें कि आपने क्या किया है:

git log -1

आपको कुछ इस तरह से समाप्त करना चाहिए:

PowerShell में मल्टी-लाइन Git प्रतिबद्ध संदेश

स्क्रीनशॉट एक उदाहरण से है जिसे मैंने पॉज़िट के साथ पॉवरशेल का उपयोग करके सेट किया है।


7
बहुत बढ़िया जवाब। मैंने इसके लिए उम्र के लिए चारों ओर देखा है और अपने Git प्रतिबद्ध संदेशों को प्रारूपित करने के लिए कई अलग-अलग तरीकों की कोशिश की है, लेकिन यह सबसे अच्छा काम करता है। मैं पुष्टि कर सकता हूं कि यह Git 1.8.2.1 के साथ प्रॉम्प्ट पर काम करता है।
crmpicco


2
यह मेरे लिए विंडोज के लिए गिट बैश में बहुत काम आया ।
यूलिसिस अल्वेस

1
यह चुना हुआ उत्तर होना चाहिए क्योंकि यह सबसे संगत विधि है, यह किसी भी विशिष्ट CLI संकेत पर भरोसा नहीं करता है जैसे कुछ अन्य सुझाव करते हैं ..

1
यह एक बेहतर उत्तर है और इसे उत्तर के रूप में चुना जाना चाहिए। यह न केवल एक डिफ़ॉल्ट व्यवहार के रूप में लाइन में जाता है, और एक बहुत क्लीनर कमिट संदेश प्रदान करता है, बल्कि यह कई-मीटर के साथ कुछ अधिक लचीला है। भले ही यह विंडोज़ विशिष्ट दिखता है और विंडोज़ से संबंधित टिप्पणियों को आकर्षित करता है, यह लिनक्स में भी ठीक काम करता है।
0xc0de

44

कुछ करने जैसा

git commit -m"test\ntest"

काम नहीं करता है, लेकिन कुछ ऐसा है

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

काम करता है, लेकिन यह बहुत सुंदर नहीं है। आप git-commitlbअपने में एक कमांड सेट करते हैं PATHजो कुछ इस तरह करता है:

#!/bin/bash

message=$1

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

और इसे इस तरह से उपयोग करें:

git commitlb "line1\nline2\nline3"

चेतावनी के शब्द, मुझे लगता है कि सामान्य सम्मेलन में पहली पंक्ति के रूप में एक सारांश रेखा होती है, और फिर दो पंक्ति टूट जाती है, और फिर प्रतिबद्ध संदेश में एक विस्तारित संदेश होता है, इसलिए ऐसा कुछ करना उस सम्मेलन को तोड़ देगा। आप निश्चित रूप से कर सकते हैं:

git commitlb "line1\n\nline2\nline3"

8
+1 यह वह सामान्य सम्मेलन था जिसने मुझे इस मार्ग की तलाश में डाल दिया। धन्यवाद
एलन Whitelaw

39

से Git प्रलेखन :

-m <msg>
--message = <msg>
दिए गए संदेश को संदेश के रूप में उपयोग करें। यदि कई -mविकल्प दिए गए हैं, तो उनके मूल्यों को अलग-अलग पैराग्राफ के रूप में संक्षिप्त किया गया है।

इसलिए, यदि आप कई प्रतिबद्ध संदेशों को समूहीकृत करना चाह रहे हैं तो यह कार्य करना चाहिए:

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

अज्ञेय समाधान (शेल-स्वतंत्र)। इसके लिए धन्यवाद। हमें RTFM :)
Mat M

38

मुझे आशा है कि यह पोस्ट किए गए प्रश्न से बहुत दूर नहीं है, लेकिन डिफ़ॉल्ट संपादक सेट करना और फिर उपयोग करना

git commit -e

अधिक आरामदायक हो सकता है।


2
यह सबसे अच्छा anwser होना चाहिए।
hxpax

5
आप दूर छोड़ सकते हैं -eऔर यह अभी भी संपादक को
खोलेगा

यह वह उत्तर था जिसकी मुझे तलाश थी।
टीनमारिनो

28

सामान उलझने की कोई जरूरत नहीं है। -m "text...अगली लाइन दबाने के बाद मिल जाती है Enter। जब Enterदबाया जाता है >प्रकट होता है। जब आप कर रहे हैं, बस डाल "और प्रेस 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
इस जवाब को पर्याप्त प्यार नहीं मिल रहा है!
cBlaine

1
यह एक शानदार उत्तर है, नई लाइनें गितुब पर सही तरीके से दिखाई गई हैं। पहली पंक्ति हेडिंग के रूप में दिखाई देती है।
योगेश उमेश वैट

18

मैं एक मैक पर zsh का उपयोग करता हूं, और मैं दोहरे उद्धरणों (") के भीतर बहु-पंक्ति प्रतिबद्ध संदेश पोस्ट कर सकता हूं। मूल रूप से मैं नई लाइनों के लिए रिटर्न टाइप करता रहता हूं और दबाता रहता हूं, लेकिन जब तक मैं उद्धरणों को बंद नहीं करता और वापस नहीं आता, तब तक संदेश जीआईटी को नहीं भेजा जाता है। ।


7
आप बैश में भी ऐसा कर सकते हैं।
पीटर किसान

17

बैश / Zsh में आप बस उद्धरणों के अंदर शाब्दिक लाइन ब्रेक का उपयोग कर सकते हैं:

git commit -m 'Multi-line
commit
message'

एएनएसआई-सी उद्धृत बश / ज़श में भी काम करता है:

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

आप कमिट को संपादित करने के लिए अपनी पसंद के संपादक का उपयोग करने के लिए गिट को निर्देश भी दे सकते हैं। Git-प्रतिबद्ध पर डॉक्स से :

प्रतिबद्ध लॉग संदेश को संपादित करने के लिए उपयोग किए जाने वाले संपादक को GIT_EDITORपर्यावरण चर, core.editorकॉन्फ़िगरेशन चर, VISUALपर्यावरण चर या EDITOR पर्यावरण चर (उस क्रम में) से चुना जाएगा। देखें Git-वर जानकारी के लिए।


5

व्यक्तिगत रूप से, मुझे सही करने के बाद vi, कमांड लाइन पर होने के बजाय (या आपकी पसंद का जो भी संपादक है), इस तथ्य के बाद प्रतिबद्ध संदेशों को संशोधित करना सबसे आसान लगता है ।git commit --amendgit commit


6
आप केवल उपयोग करके संशोधन के बिना यह एक ही परिणाम प्राप्त कर सकते हैं git commit -e
नाथन हेंचि

4
या बस git commit, और यह एक प्रतिबद्ध संदेश टेम्पलेट के साथ एक संपादक खोल देगा।
जिम स्टीवर्ट 21

5

यदि आप बैश का उपयोग कर रहे हैं, तो हिट करें C-x C-e ( Ctrl+ x Ctrl+ e) , और यह आपके पसंदीदा संपादक में वर्तमान कमांड को खोलेगा।

आप पसंदीदा संपादक को ट्विक करके बदल सकते हैं VISUALऔर EDITOR

यही मेरे अंदर है .bashrc:

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

1
तो किसी ने इसको कम क्यों किया? यह बैश में मल्टीलाइन कमांड के साथ काम करने का सबसे सुविधाजनक तरीका है, बस आपको इसे एक बार ठीक से कॉन्फ़िगर करना होगा। मैं यहां अन्य उत्तरों में दिखाए गए अन्य बेवकूफ सुझावों का उपयोग कर रहा हूं, लेकिन एक बार जब आप अपने पसंदीदा टेक्स्ट एडिटर में अपने आदेशों को संपादित करना सीख जाते हैं तो कोई रास्ता नहीं है।
एलेक्स-डैनियल जकीमेंको-ए।

1
यह बहुत ही दिल से उपयोगी है मैं बस विश्वास नहीं कर सकता कि मैं इसके बिना अपने पिछले वर्षों में रहता था।
सूनडीड

2

यहाँ मानक cmd.exe शेल के साथ विंडोज पर विफल समाधान की एक सूची है (आपको कुछ परीक्षण और त्रुटि को बचाने के लिए!)

  • git commit -m 'Hello Enter काम नहीं करता है: यह एक नई लाइन के लिए नहीं पूछेगा

  • git commit -m "Hello Enter वही

  • git commit -m "Hello^ Enter वही

  • git commit -m 'Hello^ Enter World'काम करने की तरह लग रहा है क्योंकि यह पूछता है "अधिक?" और एक नई पंक्ति लिखने की अनुमति देता है, लेकिन आखिरकार जब git logआप देखेंगे कि यह अभी भी एक-पंक्ति संदेश है ...

TL; DR: भले ही विंडोज पर, कमांडलाइन पार्सिंग अलग तरीके से काम करता है , और ^मल्टीलाइन इनपुट की अनुमति देता है, यह यहां मदद नहीं करता है।

अंत git commit -eमें शायद सबसे अच्छा विकल्प है।


बस "शेल" विंडोज़ ऑफ़र के लिए उस उदास, उदास बहाने का उपयोग न करें।
jthill

2

अफसोस की बात है, git को अपने संदेश में किसी भी नए वर्ण के लिए अनुमति नहीं लगती है। ऊपर पहले से ही कई उचित समाधान हैं, लेकिन जब स्क्रिप्टिंग होती है, तो वे परेशान होते हैं। यहाँ दस्तावेज़ भी काम करते हैं, लेकिन इससे निपटने के लिए थोड़ा कष्टप्रद भी हो सकता है (सोचिए यमल फाइलें)

मैंने जो किया था यह रहा:

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

हालांकि यह अभी भी बदसूरत है, यह 'वन-लाइनर्स' के लिए अनुमति देता है जो अभी भी उपयोगी हो सकता है। जैसा कि आमतौर पर तार चर होते हैं या चर के साथ संयुक्त होते हैं, बदसूरत को न्यूनतम तक रखा जा सकता है।


1

मैं किसी को यह उल्लेख करते नहीं देखता कि यदि आप कोई संदेश नहीं देते हैं यह आपके लिए नैनो (कम से कम लिनक्स में) खोलेगा जहाँ आप कई लाइनें लिख सकते हैं ...

केवल इसकी आवश्यकता है:

git commit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.