क्या GitHub पर एक प्रतिबद्ध संदेश संपादित करने का कोई तरीका है?


129

क्या GitHub को कमिट करने और पुश करने के बाद एक प्रतिबद्ध संदेश को संपादित करने का कोई तरीका है? मैं देखता हूं कि इनलाइन टिप्पणी के साथ-साथ एक 'नोट जोड़ें' भी है, लेकिन एक प्रतिबद्ध संदेश का कोई वास्तविक संपादन नहीं है। गिट एक्सटेंशन में 'संशोधन कमिट' भी है, लेकिन यह मौजूदा संदेश को संपादित नहीं करता है।


आप कमिट करने की कोशिश कर सकते हैं (इस SO प्रश्न में कुछ विकल्प देखें: stackoverflow.com/questions/4114095/… ) - केवल यह सुनिश्चित करें कि आप किसी भी कोड परिवर्तन को पहले वापस कर लें ताकि आप किसी टिप्पणी के लिए खो न जाएं!
यात्रा टेक गाइ

यह भी देखें कि मैं Git में गलत संदेश कैसे संपादित करूं? स्टैक ओवरफ्लो पर।
अर्जन

जवाबों:


182
  1. git rebase -i <commit hash you want to change>^

    यह आपके डिफ़ॉल्ट संपादक (आमतौर पर ) को हर एक के लिए आवागमन और कार्यों की सूची के साथ खोलेगा । डिफ़ॉल्ट रूप से, क्रिया है pick

  2. किसी भी कमिट के लिए आप संदेश बदलना, बदलना pickचाहते हैं reword

  3. सहेजें और छोड़ें (vi:) में :wq

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

    एक बार जब आप सभी प्रतिबद्ध संदेशों को संपादित कर लेते हैं, तो आप कमांड प्रॉम्प्ट पर लौट जाएंगे, और अपडेट किए गए संदेशों के साथ एक नया पेड़ होगा।

  5. अब आप उन्हें उपयोग करके github पर अपलोड कर सकते हैं git push origin --force

तुम सिर्फ ठीक करने के लिए की जरूरत है अपने पिछले प्रतिबद्ध, आप चरणों के साथ 1-4 की जगह ले सकता git commit --amend


3
@MatthewPeters मुझे लगता है कि एक रास्ता होना चाहिए, लेकिन मुझे नहीं पता - मैं सीधे कमांडलाइन का उपयोग करता हूं।
मूरिनिक

4
ऐसा नहीं लगता कि आप <> हैश को बदलना चाहते हैं> निर्दिष्ट कर सकते हैं, बल्कि आपको उस कमिट के हैश को निर्दिष्ट करना होगा जिसे आप बदलना चाहते हैं या उपयोग करना चाहते हैं आइटम जिसे आप बदलना चाहते हैं वह रहता है।
ssc327

3
@ ssc327 ध्यान दें कि मैं ^वहाँ था - मैंने वास्तव में सुझाव दिया था कि आप जिस बदलाव को चाहते हैं, उसके माता-पिता पर पुन: दबाव डालें ।
मूरिनिक

2
@Murenik आप सही हैं, मैं किसी तरह से ^
ssc327

1
@deadfish Windows कमांड लाइन का उपयोग करते हुए, आपको ^^कमांड को शाब्दिक रूप से समाप्त करने के लिए टाइप करना होगा ^ : git rebase -i 2c747b32^^
Wyck

35

Intellij Idea में आप इसे इतना आसान कर सकते हैं।

  1. संस्करण नियंत्रण (इतिहास) खोलें
  2. लॉग टैब चुनें
  3. टिप्पणी बदलने के लिए प्रतिबद्ध का चयन करें
  4. F2 (मैक fn + F2) दबाएं, और अपने प्रतिबद्ध संदेश को अपडेट करें

1
काम नहीं कर रहा है यदि आप पहले से ही रिमोट से धक्का दिया है।
paynd

8
git push origin --forceजैसा कि @ मुरीनिक के उत्तर में सुझाया गया है, आपको बाद में निष्पादित करना होगा ।
दान मैक

1
यदि पहले से ही धक्का दिया गया है, तो "reword" विकल्प अक्षम है।
होयज

1
Intellij IDEA के साथ ऐसा करने के लिए एक कमिट जो धकेल दी गई है, आपको पहले एक इंटरेक्टिव रिबेस से शुरू करना होगा (जैसे आप Git के कमांड लाइन से करेंगे)। रिबास करने के लिए, अपने प्रोजेक्ट पर राइट क्लिक करें -> "Git" मेन्यू आइटम -> "रिपॉजिटरी" -> "रीबेज ..." (लास्ट मेन आइटम)। "ऑन्टो" फ़ील्ड में संशोधित करने और "रीबेस" पर क्लिक करने से पहले आप कमिटमेंट का SHA डालें। फिर आपको इंटरेक्टिव रिबेस प्रॉम्प्ट मिलेगा। आप जिस
कमिटमेंट

1
(जारी) फिर आपको हर उस संशोधन के लिए एक पाठ संकेत प्रस्तुत किया जाएगा जिसे आप संशोधित करना चाहते हैं। लॉग संदेशों को संशोधित किए जाने के बाद, आप आगे के संशोधनों को लागू कर सकते हैं (ध्यान दें कि अब "reword" विकल्प अब बाहर नहीं निकाला गया है)। जब आप समाप्त कर लें, तब आप अपने संशोधनों को इंटरएक्टिव रिबेस को समाप्त करने के लिए मजबूर कर सकते हैं। पूरी प्रक्रिया वास्तव में @Mureinik के उत्तर के समान है जो इसके बजाय कमांड लाइन से कर रहे हैं।
jplandrain

3

परिसर:

अगर आपका गिट-ग्राफ जैसा दिखता है ...

O   target-commit that you want to change its message [df9c192]
|
O   parent-commit [b7ec061]
|
O

( df9c192और b7ec061अलग से लक्ष्य-प्रतिबद्ध और माता-पिता की प्रतिबद्ध हैश हैं)

उपाय:

आप बस निम्नलिखित निर्देश टाइप कर सकते हैं ...

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

स्पष्टीकरण:

  1. git reset --soft b7ec061 फ़ाइलों के अपने परिवर्तन रखने और माता-पिता को रीसेट करने के लिए (यानी b7ec061)
  2. git commit -m "..." स्थानीय रूप से एक नई प्रतिबद्धता बनाएंगे
  3. git push -f अपने नए कमिट को सर्वर पर धकेलेंगे और पुराने को बदल देंगे (यानी df9c192)

2

एक अन्य विकल्प एक अतिरिक्त "इरेटा कमिट" (और पुश) बनाना है जो उस कमिट ऑब्जेक्ट को संदर्भित करता है जिसमें त्रुटि है - नया इरेटा कमिट भी सुधार प्रदान करता है। इरेटा कमिट बिना किसी ठोस कोड परिवर्तन के एक प्रतिबद्ध है, लेकिन एक महत्वपूर्ण प्रतिबद्ध संदेश है - उदाहरण के लिए, अपनी रीडमी फ़ाइल में एक स्थान वर्ण जोड़ें और उस परिवर्तन को महत्वपूर्ण प्रतिबद्ध संदेश के साथ करें, या गिट विकल्प का उपयोग करें --allow-empty। यह निश्चित रूप से आसान है और रिबासिंग से अधिक सुरक्षित है, यह सच्चे इतिहास को संशोधित नहीं करता है, और यह शाखा के पेड़ को साफ रखता है (उपयोग करते हुएamendअगर आप सबसे हालिया कमिट को सही कर रहे हैं, तो भी एक अच्छा विकल्प है, लेकिन इरेटा कमिटमेंट पुराने कमिट के लिए एक अच्छा विकल्प हो सकता है)। इस तरह की बात शायद ही कभी होती है कि बस गलती का दस्तावेजीकरण काफी अच्छा हो। भविष्य में, यदि आपको किसी फीचर कीवर्ड के लिए गिट लॉग के माध्यम से खोज करने की आवश्यकता है, तो मूल (त्रुटिपूर्ण) कमिट दिखाई नहीं दे सकता है क्योंकि उस मूल कमिट (मूल टाइपो) में गलत कीवर्ड का उपयोग किया गया था - हालांकि, कीवर्ड दिखाई देगा इरेटा कमिट में जो फिर आपको उस मूल कमिट की ओर संकेत करेगा जिसके पास टाइपो था। यहाँ एक उदाहरण है:

$ git लॉग
प्रतिबद्ध 0c28141c68adae276840f17ccd4766542c33cf1d
लेखक: प्रथम अंतिम 
दिनांक: बुध अगस्त: 15:55:52 2018 -0600

    इरेटा प्रतिबद्ध:
    इस कमिट में कोई मूल कोड परिवर्तन नहीं है।
    थिस कमिट केवल पिछले कमिट मैसेज में करेक्शन करने के लिए दिया गया है।
    यह वस्तु e083a7abd8deb5776cb304fa13731a4182a24be1 से संबंधित है
    मूल गलत प्रतिबद्ध संदेश:
        लाल करने के लिए पृष्ठभूमि का रंग बदल गया
    सुधार (* परिवर्तन पर प्रकाश डाला *):
        पृष्ठभूमि का रंग बदलकर * नीला *

प्रतिबद्ध 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
लेखक: प्रथम अंतिम 
दिनांक: बुध अगस्त: 15:43:16 2018 -0600

    कुछ अंतरिम संदेश

प्रतिबद्ध e083a7abd8deb5776cb304fa13731a4182a24be1
लेखक: प्रथम अंतिम 
दिनांक: बुध अगस्त 8 13:31:32 2018 -0600

    लाल करने के लिए पृष्ठभूमि का रंग बदल गया

यकीन के लिए यह सुरक्षित है, लेकिन पढ़ने के लिए बहुत सारे पाठ। मैं इतिहास :) पुनर्लेखन पसंद करते हैं
pkalinow

0

@Mureinik का उत्तर अच्छा है लेकिन नौसिखिया द्वारा समझा नहीं जा सकता है।

पहली विधि:

  1. यदि आप केवल नवीनतम प्रतिबद्ध संदेश को संपादित करना चाहते हैं, तो आपको केवल आवश्यकता है git commit --amend, आप देखेंगे:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
#       modified:   foo.py
#
  1. जैसा कि आप देख सकते हैं, शीर्ष पर संदेश को बिना किसी उपसर्ग के जैसे कि pick, यह पहले से ही संपादित पृष्ठ है और आप शीर्ष संदेश को संपादित कर सकते हैं और सहेज सकते हैं और छोड़ सकते हैं , जैसे:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. फिर करो git push -u origin master --forceया <how you push normally> --force। यहाँ कुंजी है --force

दूसरी विधि:

  1. आप git logरिपॉजिटरी url से कमिट हैश को देख सकते हैं या निकाल सकते हैं , उदाहरण मेरे मामले में है881129d771219cfa29e6f6c2205851a2994a8835

  2. तो आप कर सकते हैं git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835या git rebase -i HEAD^(यदि नवीनतम)

  3. तुम देखोगे:

pick <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#  d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
  1. लेकिन अगर आप देखते हैं कि आप noopशायद गलत टाइप कर रहे हैं, जैसे यदि आप ऐसा करते हैं git rebase -i 881129d771219cfa29e6f6c2205851a2994a88जो ^अंत में गायब है , तो आप बेहतर तरीके से संपादक को बिना सेव किए छोड़ देते हैं और कारण का पता लगा सकते हैं:
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. यदि कोई noopसमस्या नहीं है, तो बस शब्द pickको बदल दें reword, अन्य बस बनी हुई है (आप इस बिंदु पर प्रतिबद्ध संदेश संपादित नहीं करते हैं), उदाहरण के लिए:
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
#  p, pick = use commit
...
  1. सहेजें और छोड़ें # 1 विधि के समान संपादन पृष्ठ देखेंगे :
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
#    reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
#       modified:   foo.py
#
  1. संदेश को शीर्ष पर संपादित करें, जैसे विधि # 1 और सहेजें और छोड़ें, जैसे:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. फिर से, # 1 विधि की तरह, करो git push -u origin master --forceया <how you push normally> --force। यहाँ कुंजी है --force

अधिक जानकारी के लिए कृपया डॉक पढ़ें ।

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