Git: 'git reset ’के बाद प्रतिबद्ध संदेशों का पुन: उपयोग / रखरखाव कैसे करें?


103

Git उपयोगकर्ता के रूप में मैं नियमित रूप से इस स्थिति में आता हूं, कि मुझे एक या एक से अधिक तरीके से काम करने की आवश्यकता है जो कि फिक्सअप में --amendया उसके rebase -iसाथ फिट नहीं होते हैं । आमतौर पर मैं ऐसा कुछ करता

git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?

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

क्या इससे निपटना बेहतर है? और यह कैसे होगा, अगर मेरे एक से अधिक प्रतिबद्ध शामिल हैं?

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


2
अगर तुम सब किया था git reset head~1, अपने पुराने प्रतिबद्ध संदेश सिर्फ 2 में प्रवेश नहीं होगा reflog?

हां - लेकिन मैं कॉपी और पेस्ट किए बिना संदेश का पुन: उपयोग कैसे कर पाऊंगा (जिसे आमतौर पर मैनुअल अनइंडेंटिंग की आवश्यकता होती है)
बेंटोलर

आजकल, बस gitkखुला है। इस तरह से आपको रिफ्लॉग का उपयोग भी नहीं करना पड़ेगा। वैकल्पिक रूप से, rev-parse <branch>रीसेट करने से पहले अपना हैश प्राप्त करने के लिए और izizaman द्वारा उत्तर का उपयोग करें।
cst1992

जवाबों:


143

एक के बाद git reset, यह एक-लाइनर यह कर सकता है:

git commit --reuse-message=HEAD@{1}

या इससे भी कम:

git commit -C HEAD@{1}

आप @ user2718704 द्वारा दिए गए अन्य विकल्पों का उपयोग कर सकते हैं ।


6
शोर्टर:git commit -C@@{1}
फु

2
यह रिफ्लॉग का एक शानदार उपयोग है
डेविड मैन

22
रीसेट के बाद, ORIG_HEAD सेट किया गया है। मुझे git commit --reuse-message=ORIG_HEADसबसे स्पष्ट लगता है।
स्कॉट जैकबसेन

45

जब "git कमिट" कमांड चलती है, तो आपको निम्नलिखित विकल्पों की जांच करनी होगी,

फिर इस्तमाल करें,

--reuse-message=<commit>

पुन: उपयोग पर संपादित करने के लिए,

--reedit-message=<commit>

लेखक को बदलने के लिए,

--reset-author

1
इसे नए समाधान के रूप में चिह्नित किया गया, क्योंकि इसने सबसे व्यापक उत्तर प्रदान किया। हालांकि यह समाधान अभी भी मेरे 'पुनर्प्राप्ति' के मुद्दों को पूरी तरह से हल नहीं करता है।
बेंटोलर

9

क्यों रीसेट कर सकते हैं यदि आप हैक कर सकते हैं, ठीक कर सकते हैं, हैक कर सकते हैं और फिर बस चला सकते हैं git commit --amend --no-edit; इस प्रकार, अपने मूल प्रतिबद्ध संदेश को बनाए रखना।

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


2
इंटरेक्टिव रिबेस करने के दौरान, आप यह fixupनिर्देश देने के लिए भी उपयोग कर सकते हैं कि बाद की कमिट पिछली कमिट को ठीक करने के लिए है और यह फ़िक्सअप कमिट से संदेश को छोड़ने वाले मूल संदेश से स्वचालित रूप से प्रतिबद्ध संदेश का उपयोग करेगा।
qxx

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

@BenTebulin ठीक है, इंटरएक्टिव रिबास आपको किसी भी कमिट को निर्दिष्ट कमिट्स की श्रेणी में संशोधित करने देता है। यह कड़ाई से संशोधित नहीं किया गया है।
Mart1n

@ बाहर अकेला छोड़ कर लिए mart1n धन्यवाद संपादित में rebase -i। उस संदर्भ में इसका इस्तेमाल कभी नहीं किया। शेष मामलों जैसे कि अन्य उत्तर को फिर से मर्ज करना मेरे प्रश्न के लिए अधिक उपयुक्त है, इसलिए मैंने उस एक को उत्तर के रूप में चिह्नित किया।
बेंटोलर

Intellij में ऐसे स्कोप हैं जो केवल उन फ़ाइलों पर काम करते हैं जो अभी तक प्रतिबद्ध नहीं हैं। फ़ाइलों को अन-कम करने के लिए रीसेट करने के लिए इसका उपयोगी है ताकि intellij को निर्देश दिया जा सके फ़ाइलों को उदाहरण के लिए, और फिर उसी संदेश के साथ उन फ़ाइलों को फिर से प्रतिबद्ध करें। इंटेलीज की स्कूपिंग की सीमाओं के कारण इसके लिए अभ्यस्त काम में संशोधन नहीं करें।
डेविड मैन

5

आप git commit --reset-author -c <commit>संपादन और वर्तमान समय के साथ प्रतिबद्ध संदेश का पुन: उपयोग करने पर विचार कर सकते हैं।


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