[git] मौजूदा, अप्रचलित कामों को कैसे संशोधित करें?


Answers

git commit --amend -m "your new message"
Question

मैंने एक प्रतिबद्ध संदेश में गलत बात लिखा है। वैकल्पिक रूप से, मैं कुछ फाइलों को शामिल करना भूल गया हूं।

मैं प्रतिबद्ध संदेश / फ़ाइलों को कैसे बदल सकता हूं? प्रतिबद्धता अभी तक धक्का नहीं दी गई है।




पिछली प्रतिबद्धता में संशोधन करने के लिए, इच्छित परिवर्तन करें और उन परिवर्तनों को चरणबद्ध करें, और फिर चलाएं

git commit --amend

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

पिछली प्रतिबद्धता में संशोधन करने और एक ही लॉग संदेश रखने के लिए, चलाएं

git commit --amend -C HEAD

इसे पूरी तरह से हटाकर पिछली प्रतिबद्धता को ठीक करने के लिए, चलाएं

git reset --hard HEAD^

यदि आप एक से अधिक प्रतिबद्ध संदेश संपादित करना चाहते हैं, तो चलाएं

git rebase -i HEAD~commit_count

(प्रतिबद्धताओं की संख्या के साथ commit_count बदलें जिसे आप संपादित करना चाहते हैं।) यह आदेश आपके संपादक को लॉन्च करता है। "पिक" के बजाय "एडिट" के रूप में पहली प्रतिबद्धता (जिसे आप बदलना चाहते हैं) को चिह्नित करें, फिर अपने संपादक को सहेजें और बाहर निकलें। वह परिवर्तन करें जिसे आप प्रतिबद्ध करना चाहते हैं और फिर चलाएं

git commit --amend
git rebase --continue

नोट: आप git commit --amend द्वारा खोले गए संपादक से "इच्छित परिवर्तन करें" भी कर सकते हैं




आप git-rebase-reword उपयोग कर सकते हैं

यह प्रतिबद्धता के रूप में किसी भी प्रतिबद्धता (केवल अंतिम नहीं) को संपादित करने के लिए डिज़ाइन किया गया है

$ git rebase-reword <commit-or-refname>

इसका नाम एक प्रतिबद्धता में संशोधन करने के लिए इंटरैक्टिव रिबेज पर कार्रवाई के बाद किया गया है: "शब्द"। इस पोस्ट और man सेक्शन इंटरैक्टिव मोड देखें-

उदाहरण:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^



I like to use the following:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>



इस प्रश्न पर बहुत सारे उत्तर हैं लेकिन उनमें से कोई भी सुपर विवरण में बताता है कि वीआईएम का उपयोग करके पुराने प्रतिबद्ध संदेशों को कैसे बदला जाए। मैं इसे खुद करने की कोशिश कर रहा था, इसलिए यहां मैं विस्तार से लिखूंगा कि मैंने यह विशेष रूप से उन लोगों के लिए कैसे किया जिनके पास वीआईएम में कोई अनुभव नहीं है!

मैं अपने पांच नवीनतम कामों को बदलना चाहता था जिन्हें मैंने पहले ही सर्वर पर धक्का दिया था। यह काफी 'खतरनाक' कारण है यदि किसी और ने पहले से ही इसे खींच लिया है तो आप प्रतिबद्ध संदेशों को बदलकर गड़बड़ कर सकते हैं। हालांकि जब आप अपनी छोटी शाखा पर काम कर रहे हैं और सुनिश्चित हैं कि कोई भी इसे खींच नहीं लेता है तो आप इसे इस तरह बदल सकते हैं:

मान लीजिए कि आप अपने पांच नवीनतम कामों को बदलना चाहते हैं, फिर आप इसे टर्मिनल में टाइप करें:

git rebase -i HEAD~5 * जहां 5 उन प्रतिबद्ध संदेशों की संख्या है जिन्हें आप बदलना चाहते हैं। (इसलिए यदि आप 10 वीं को अंतिम प्रतिबद्धता में बदलना चाहते हैं तो आप 10 में टाइप करें)

यह आदेश आपको वीआईएम में ले जाएगा जहां आप अपने प्रतिबद्ध इतिहास को 'संपादित' कर सकते हैं। आप इस तरह के शीर्ष पर अपने आखिरी 5 काम देखेंगे:

pick <commit hash> commit message

pick बजाय आपको reword लिखना होगा। आप इसे टाइप करके वीआईएम में कर सकते हैं, जिससे आप INSERT-मोड में जा सकते हैं। (आप देखते हैं कि आप नीचे INSERT शब्द द्वारा सम्मिलित मोड में हैं) काम करने के बजाय आप pick बजाय reword में प्रकार बदलना चाहते हैं

फिर आपको इस स्क्रीन को सहेजने और छोड़ने की ज़रूरत है, आप इसे एएससी बटन दबाकर पहले 'कमांड-मोड' में जाकर करते हैं। (आप जांच सकते हैं कि आप कमांड मोड में हैं यदि नीचे INSERT शब्द गायब हो गया है) तो आप टाइप करके एक कमांड टाइप कर सकते हैं : सहेजने और छोड़ने का आदेश wq । तो यदि आप टाइप करते हैं :wq आप सही रास्ते पर हैं।

फिर वीआईएम प्रत्येक प्रतिबद्ध संदेश पर जायेगा जिसे आप दोबारा लिखना चाहते हैं, यहां आप वास्तव में प्रतिबद्ध संदेश बदल सकते हैं। आप इसे INSERT-मोड में जाकर, प्रतिबद्ध संदेश बदलकर, कमांड मोड में जाकर सहेजकर छोड़ देंगे। यह 5 बार करो और आप वीआईएम से बाहर हैं!

फिर, यदि आपने पहले से ही अपनी गलत प्रतिबद्धताओं को धक्का दिया है, तो आपको उन्हें ओवरराइट करने के लिए git push --force को git push --force करने की आवश्यकता है। याद रखें कि git push --force करना एक खतरनाक चीज है, इसलिए सुनिश्चित करें कि सर्वर से कोई भी खींचा नहीं गया है क्योंकि आपने अपनी गलत प्रतिबद्धताओं को धक्का दिया है!

अब आपने अपने प्रतिबद्ध संदेश बदल दिए हैं!

(जैसा कि आप देखते हैं कि मैं वीआईएम में अनुभव नहीं कर रहा हूं, इसलिए अगर मैंने गलत होने के बारे में गलत व्याख्या करने के लिए गलत 'लिंगो' का इस्तेमाल किया, तो मुझे सही करने के लिए स्वतंत्र महसूस करें!)




मैं जितना संभव हो उतना गिट जीयूआई का उपयोग करता हूं, और यह आपको अंतिम प्रतिबद्धता में संशोधन करने का विकल्प देता है:

इसके अलावा, git rebase -i origin/master एक अच्छा मंत्र है जो हमेशा आपको मास्टर के शीर्ष पर किए गए कामों के साथ पेश करेगा, और आपको संशोधन, हटाने, पुन: क्रमबद्ध करने या स्क्वैश करने का विकल्प देगा। पहले हैश को पकड़ने की जरूरत नहीं है।




  1. यदि आप केवल अपने अंतिम प्रतिबद्ध संदेश को संशोधित करना चाहते हैं, तो करें:

    git commit --amend
    

    यह आपको आपके टेक्स्ट एक्सिटर में छोड़ देगा और आपको अंतिम प्रतिबद्ध संदेश बदलने देगा।

  2. यदि आप अंतिम 3 प्रतिबद्ध संदेशों को बदलना चाहते हैं, या उस बिंदु तक के किसी भी प्रतिबद्ध संदेश को बदलना चाहते हैं, तो git rebase -i आदेश में HEAD~3 आपूर्ति करें:

    git rebase -i HEAD~3
    



आप इसके लिए गिट filter-branch का भी उपयोग कर सकते हैं।

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

यह एक छोटी सी git commit --amend रूप में आसान नहीं है - लेकिन यह विशेष रूप से उपयोगी है, अगर आपके पास पहले से ही आपके ग़लत संदेश के बाद कुछ विलय हो।

ध्यान दें कि यह HEAD और त्रुटिपूर्ण प्रतिबद्धता के बीच हर प्रतिबद्धता को फिर से लिखने का प्रयास करेगा, इसलिए आपको अपना msg-filter कमांड बहुत बुद्धिमान चुनना चाहिए ;-)




यदि आप गिट जीयूआई का उपयोग कर रहे हैं, तो आप अंतिम प्रतिबद्धता में संशोधन कर सकते हैं जिसे इसके साथ धक्का नहीं दिया गया है:

Commit/Amend Last Commit



यदि आप नवीनतम प्रतिबद्ध उपयोग को संपादित करना चाहते हैं:

git commit --amend

या

git commit --amend -m 'one line message'

लेकिन यदि आप पंक्ति में कई कामों को संपादित करना चाहते हैं तो आपको इसके बजाय रीबेजिंग का उपयोग करना चाहिए:

git rebase -i <hash of one commit before the wrong commit>

ऊपर की तरह एक फ़ाइल में संपादन / ई या अन्य विकल्प में से एक लिखें और सहेजें और बाहर निकलें।

अब आप पहली गलत प्रतिबद्धता पर होंगे। फ़ाइलों में परिवर्तन करें, और वे आपके लिए स्वचालित रूप से चरणबद्ध हो जाएंगे। प्रकार

git commit --amend

बचाओ और बाहर निकलें और टाइप करें

git rebase --continue 

अपने सभी चयनों के साथ समाप्त होने तक अगले चयन में जाने के लिए।

ध्यान दें कि ये चीजें उस विशेष प्रतिबद्धता के बाद आपके सभी एसएचए हैंश बदलती हैं।




किसी भी व्यक्ति के लिए केवल नवीनतम संदेश ( अप्रकाशित काम करने के लिए ) से अधिक संपादित करने के लिए विंडोज / मैक जीयूआई की तलाश में , मैं SourceTree की अनुशंसा करता हूं

अद्यतन: मैंने तब से पता चला है कि नीचे दी गई प्रक्रिया को आगे के विवरण में वर्णित किया गया है, बेहतर स्क्रीनशॉट और इस उत्तर में प्रतिबद्धताओं को धक्का देने के लिए अतिरिक्त कदमों के साथ।

प्रक्रिया:

  1. सुनिश्चित करें कि आपने सभी मौजूदा परिवर्तनों को प्रतिबद्ध या बंद कर दिया है (यानी "फ़ाइल स्थिति" टैब में कोई भी फाइल सूचीबद्ध नहीं है - यह अन्यथा काम नहीं करेगी)।
  2. "लॉग / इतिहास" टैब में, उस क्रिया के नीचे दिए गए ग्राफ़ में आस-पास की रेखा के साथ प्रविष्टि पर राइट क्लिक करें, जिसे आप संपादित करना चाहते हैं और "बच्चों को रीफ्रेश करें > इंटरैक्टिव ..." का चयन करें।
  3. उस प्रतिबद्ध संदेश के लिए पूरी पंक्ति का चयन करें जिसे आप बदलना चाहते हैं ( यानी "संदेश" कॉलम पर क्लिक करें )।
  4. "संदेश संपादित करें" बटन पर क्लिक करें।
  5. आने वाले संवाद में वांछित संदेश को संपादित करें और ठीक क्लिक करें।
  6. यदि अन्य संदेश बदलने के लिए चरण 3-4 दोहराएं।
  7. ठीक क्लिक करें - रीबिंग शुरू हो जाएगा - अगर सब ठीक है, तो आउटपुट "पूर्ण सफलतापूर्वक" समाप्त हो जाएगा।



यदि आप गिट जीयूआई उपकरण का उपयोग कर रहे हैं, तो अंतिम प्रतिबद्धता में संशोधन करने वाला एक बटन है। उस बटन पर क्लिक करें और फिर यह आपकी आखिरी प्रतिबद्ध फाइलें और संदेश प्रदर्शित करेगा। बस उस संदेश को संपादित करें और आप इसे नए प्रतिबद्ध संदेश के साथ प्रतिबद्ध कर सकते हैं।

या कंसोल / टर्मिनल से इस कमांड का उपयोग करें:

git commit -a --amend -m "My new commit message"



उपयोग

git commit --amend

इसे विस्तार से समझने के लिए, एक उत्कृष्ट पोस्ट है 4. गिट इतिहास को पुनर्लेखन । यह git commit --amend का उपयोग न करने के बारे में भी बात करता है।




Related