SourceTree विंडोज में एक प्रतिबद्ध संदेश संपादित करें (पहले से ही रिमोट से धकेल दिया गया)


202

मैं कमांड लाइन को छूने के बिना SourceTree में एक गलत प्रतिबद्ध संदेश कैसे संपादित करूं?

अतिरिक्त जानकारिया:

  • यह नवीनतम प्रतिबद्धता नहीं है।
  • सब कुछ पहले से ही Bitbucket को धकेल दिया गया था।
  • यह एक निजी भंडार है और मैं एकमात्र सहयोगी हूं।
  • मैं किसी भी पिछले कमिट्स को खोने का मन नहीं करता, क्योंकि मैं उन्हें कभी भी कमिट कर सकता हूं।
  • लेकिन मैं किसी भी कोड संशोधन कभी भी खोना नहीं चाहता।

परिणाम:

  • जैसा कि यह आपकी टिप्पणियों और उत्तरों के अनुसार फिलहाल असंभव लगता है, मैं एक नया भंडार बनाने जा रहा हूं और सभी को शुरू करूंगा। आपकी सहायताके लिए शुक्रिया!

जवाबों:


425

यहाँ Windows संस्करण के लिए SourceTree का उपयोग करके पिछली कमिट के संदेश को संपादित करने के लिए कदम उठाए गए हैं ( जो कि हाल ही में प्रतिबद्ध नहीं है ) :

चरण 1

उस कमिट से पहले कमिट का चयन करें जिसे आप संपादित करना चाहते हैं। उदाहरण के लिए, यदि मैं संदेश के साथ कमिट को संपादित करना चाहता हूं "FOOBAR!" फिर मुझे उस कमेट का चयन करना होगा जो इसके ठीक पहले आता है:

जिसे मैं संपादित करना चाहता हूं, उसके पहले चयन करना।

चरण 2

चयनित समिति पर राइट-क्लिक करें और क्लिक करें Rebase children...interactively:

"रिबेस बच्चों के अंतःक्रियात्मक रूप से" का चयन करना।

चरण 3

चयन के लिए प्रतिबद्ध है कि आप संपादित करना चाहते हैं, उसके बाद Edit Messageतल पर। इस मामले में, मैं "FOOBAR!" संदेश के साथ कमिट का चयन कर रहा हूं:

उस कमिट का चयन करें जिसे आप संपादित करना चाहते हैं।

चरण 4

प्रतिबद्ध संदेश संपादित करें, और फिर क्लिक करें OK। मेरे उदाहरण में, मैंने "SHAZBOT! SKADOOSH!"

प्रतिबद्ध संदेश संपादित करें

चरण 5

जब आप इंटरएक्टिव रिबेस विंडो में लौटते हैं, OKतो रिबास खत्म करने के लिए क्लिक करें :

समाप्त करने के लिए ठीक क्लिक करें।

चरण 6

इस बिंदु पर, आपको अपने नए परिवर्तनों पर बल देने की आवश्यकता होगी क्योंकि आपने पहले से ही धक्का दिया है। हालाँकि, Windows के लिए SourceTree का मौजूदा 1.5.2.0 संस्करण आपको GUI के माध्यम से बल-पुश करने की अनुमति नहीं देता है, इसलिए आपको ऐसा करने के लिए कमांड लाइन के रास्ते से Git का उपयोग करना होगा।

Terminalटर्मिनल खोलने के लिए GUI से क्लिक करें ।

टर्मिनल पर क्लिक करें

चरण 7

निम्नलिखित आदेश के साथ टर्मिनल बल-धक्का से,

git push origin <branch> -f

<branch>उस शाखा का नाम कहां है जिसे आप पुश करना चाहते हैं, और -fइसका अर्थ है कि जोर लगाना। बल पुश आपके दूरस्थ रेपो पर आपके कमिट को अधिलेखित कर देगा , लेकिन यह आपके मामले में ठीक है क्योंकि आपने कहा था कि आप अपने रेपो को अन्य लोगों के साथ साझा नहीं कर रहे हैं।

बस! हो गया!


4
कदम मूल रूप से मैक संस्करण पर भी समान हैं।
race_carr

2
खबरदार: अगर आप अपना कमिटमेंट मैसेज शुरू करना चाहते हैं तो # इससे काम नहीं चलेगा, git इसे एक कमेंट मानता है और बताता है कि आपका कमिट मैसेज खाली है!
डैनियल एडहोम इग्नाट

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

67
मजेदार - मुझे आश्चर्य है कि वे एक सरल "एडिट कमिट मैसेज" विकल्प क्यों नहीं बनाते हैं।
जोनाथन Aquino

1
फ़ोर्स पुश अब उपलब्ध है हालांकि GUI। अन्यथा सही :-)
लातिशा

43

संस्करण 1.9.6.1 पर। अनपढ़ प्रतिबद्ध के लिए।

  1. पहले से किए गए विवरण पर क्लिक करें
  2. कमिट आइकन पर क्लिक करें
  3. नया प्रतिबद्ध संदेश दर्ज करें, और प्रतिबद्ध विकल्प ड्रॉपडाउन से " नवीनतम संशोधन करें" चुनें ।
  4. अपना संदेश दें।

13

यदि टिप्पणी संदेश में गैर-अंग्रेजी वर्ण शामिल हैं, user456814 द्वारा प्रदान की गई विधि का उपयोग करके, उन वर्णों को प्रश्नवाचक चिह्न से बदल दिया जाएगा। (सॉर्सेट्री वेर 2.5.5.0 के तहत परीक्षण किया गया)

इसलिए मुझे निम्नलिखित विधि का उपयोग करना होगा।

चेतावनी : यदि कमेटी को अन्य सदस्यों द्वारा खींच लिया गया है, तो नीचे परिवर्तन उनके लिए अराजकता का कारण हो सकता है।

Step1 : sourcetree मुख्य विंडो में, अपने रेपो टैब का पता लगाएं, और git कमांड कंसोल को खोलने के लिए " टर्मिनल " बटन पर क्लिक करें।

चरण 2 :

[स्थिति ए] : लक्षित प्रतिबद्धता नवीनतम है।

1) git कमांड कंसोल में, इनपुट

git commit --amend -m "new comment message"

2) यदि लक्ष्य प्रतिबद्ध को दूरस्थ में धकेल दिया गया है, तो आपको बल द्वारा फिर से धक्का देना होगा। Git कमांड कंसोल में, इनपुट

git push --force

[स्थिति बी] : लक्षित प्रतिबद्धता नवीनतम नहीं है।

1) git कमांड कंसोल में, इनपुट

git rebase -i HEAD~n

यह नवीनतम n कमिट्स को स्क्वैश करने के लिए है। उदाहरण के लिए यदि आप अंतिम एक से पहले संदेश को संपादित करना चाहते हैं, तो एन । 2 है। यह कमांड एक vi विंडो खोलेगी, प्रत्येक पंक्ति का पहला शब्द " पिक " है, और आप लाइन के लिए "पिक" को " रीवर्ड " में बदलते हैं। आप संपादित करना चाहते हैं। फिर, :wqउस vi विंडो को सहेजने और छोड़ने के लिए इनपुट करें। अब, एक नई vi विंडो खुलेगी, इस विंडो में आप अपना नया संदेश इनपुट करते हैं। :wqबचाने और छोड़ने के लिए भी उपयोग करें।

2) यदि लक्ष्य प्रतिबद्ध को दूरस्थ में धकेल दिया गया है, तो आपको बल द्वारा फिर से धक्का देना होगा। Git कमांड कंसोल में, इनपुट

git push --force


अंत में : sourcetree मुख्य विंडो में, F5ताज़ा करने के लिए दबाएँ ।


12

अपडेट करें

नोट: यह उत्तर मूल रूप से विंडोज के लिए सोर्सट्री के पुराने संस्करणों के संबंध में लिखा गया था, और अब पुराना है।

विंडोज के लिए सोर्सट्री के मौजूदा संस्करण के लिए मेरा नया उत्तर देखें , 1.5.2.0 । मैं ऐतिहासिक उद्देश्यों के लिए इस उत्तर को पीछे छोड़ रहा हूं।

मूल उत्तर

जैसा कि मैं विंडोज पर हूं, मेरे पास कमांड लाइन टूल नहीं है और न ही मुझे पता है कि एक का उपयोग कैसे करना है :( क्या यह एकमात्र तरीका है कि मुझे सुलझाया जाए? जीयूआई सभी गिट के कार्यों को कवर नहीं करता है? - मूल पोस्टर

Git GUIs के बारे में, नहीं, वे Git के सभी कार्यों को कवर नहीं करते हैंवे पास भी नहीं आतेमेरा सुझाव है कि आप उत्तर में से एक की जांच करें कि मैं कैसे Git में एक गलत प्रतिबद्ध संदेश संपादित कर सकता हूं? , गिट पर्याप्त लचीला है कि कमांड लाइन से ... कई समाधान हैं।

SourceTree वास्तव में पहले से ही msysgit bash शेल के साथ आ सकता है, या यह मानक विंडोज कमांड शेल का उपयोग करने में सक्षम हो सकता है। किसी भी तरह से, आप इसे टर्मिनल बटन पर क्लिक करके फॉर्मट्री खोलें।

यहां छवि विवरण दर्ज करें

आप सेट करें कि कौन सा टर्मिनल सोर्सट्री का उपयोग करता है (बैश या विंडोज) यहाँ:

यहां छवि विवरण दर्ज करें

SourceTree में समस्या को हल करने का एक तरीका

कहा जा रहा है, यहाँ एक तरह से आप इसे SourceTree में कर सकते हैं। चूँकि आपने टिप्पणियों में उल्लेख किया है कि आप "दोषपूर्ण कमिट पर वापस लौटने का बुरा नहीं मानते" (जिसके द्वारा मैं आपको वास्तव में रीसेट करने का मतलब है, जो गिट में एक अलग ऑपरेशन है), तो यहाँ कदम हैं:

  1. SourceTree में खराब रीसेट को राइट-क्लिक करके और चयन कर Reset current branch to this commit, और ड्रॉप डाउन से हार्ड रीसेट विकल्प का चयन करके हार्ड रीसेट करें।यहां छवि विवरण दर्ज करें
  2. फिर कमिट बटन पर क्लिक करें
  3. नीचे दिए गए चेकबॉक्स पर क्लिक करें जो कहता है कि "नवीनतम प्रतिबद्धता में संशोधन करें"। यहां छवि विवरण दर्ज करें
  4. संदेश में इच्छित परिवर्तन करें, फिर फिर से कमेंट पर क्लिक करें। देखा!

इस टिप्पणी के बारे में :

यदि यह संभव नहीं है, क्योंकि यह पहले से ही बिटबकेट में धकेल दिया गया है, तो मुझे एक नया भंडार बनाने और शुरू करने में कोई आपत्ति नहीं होगी।

क्या इसका मतलब यह है कि आप रेपो पर काम करने वाले एकमात्र व्यक्ति हैं? यह महत्वपूर्ण है क्योंकि यह आपके सहयोगियों के लिए समस्या पैदा किए बिना रेपो के इतिहास को बदलने के लिए तुच्छ नहीं है (जैसे कि एक संशोधन करके)। हालाँकि, यह मानते हुए कि आप केवल एकमात्र व्यक्ति हैं जो रेपो पर काम कर रहे हैं, तो अगली चीज़ जो आप करना चाहते हैं वह आपके परिवर्तित इतिहास को रिमोट पर धकेलना है।

हालाँकि, इस बात से अवगत रहें कि क्योंकि आपने दोषपूर्ण कमिट के लिए एक हार्ड रीसेट किया था, तो आपको धक्का देने का कारण बनता है कि आप इसके बाद आने वाले सभी कामों को खो दें। यदि यह ठीक है, तो आपको फोर्स पुश करने के लिए कमांड लाइन पर निम्न कमांड का उपयोग करने की आवश्यकता हो सकती है, क्योंकि मुझे SourceTree में ऐसा करने का विकल्प नहीं मिला:

git push remote-repo head -f

यह भी मानता है कि BitBucket आपको एक रेपो को बल देने की अनुमति देगा।

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

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