पिछली कमिट में फ़ाइल कैसे जोड़ें?


85

अंतिम घंटे में या तो मेरे पास संशोधित फाइलें हैं

A
ATest
B
BTest

यह सुनिश्चित करने के लिए कि मेरे प्रतिबद्ध संदेश वास्तविक Aविवरण के साथ पंक्तिबद्ध हैं, वर्णन के साथ प्रतिबद्ध हैं । दुर्भाग्य से मैंने ATestउस कमिट में शामिल नहीं किया है।

इस बीच, अभी भी प्रतिबद्ध नहीं हैं Bऔर BTest

इस बिंदु पर आगे बढ़ने का सबसे अच्छा तरीका क्या है? मैं या तो करना चाहते हैं:

  1. मेरी वर्तमान में अनधिकृत फ़ाइलों को प्रभावित किए बिना पिछली प्रतिबद्ध वापस कर दें?
  2. पिछली प्रतिबद्धता के समान विवरण के तहत एक और फ़ाइल जोड़ें?

मुझे लगता है कि 2 करने का सामान्य तरीका होना चाहिए। इसके बारे में क्या समस्या है?
एड्रियन शुम

जवाबों:


141

पिछली प्रतिबद्धता में एक नई फ़ाइल जोड़ने के लिए:

$ git add new-file
$ git commit --amend

git commit --amend --no-editयदि आप प्रतिबद्ध संदेश बदलना नहीं चाहते हैं तो आप इसका उपयोग कर सकते हैं ।


3
धन्यवाद। जिज्ञासा से बाहर, अगर कमिट का sha1 ज्ञात था और कमिट 'अंतिम' नहीं था, तो उस कमिट में संशोधन कैसे संभव होगा ?
जेम्स रायत्सेव

6
@Jam मैं कहता हूँ, वास्तव में कड़ी मेहनत की कोशिश ऐसा नहीं ;-) लेकिन अगर आप चाहिए एक ही रास्ता (यकीन नहीं करता है, तो यह सबसे अच्छा है) है अपनी ही सौंपे भी नई फ़ाइल के लिए प्रतिबद्ध हैं और फिर उपयोग करने के लिए git rebase -iप्रतिबद्ध और मर्ज को पुन: व्यवस्थित करने के लिए अन्य प्रतिबद्ध के साथ नई फ़ाइल प्रतिबद्ध। यह एक अलग प्रश्न के लिए सामग्री हो सकती है।
डेविड जेड

3
जब git rebase -i@DavidZ के रूप में कर रहे हैं , तो आपको बस इतना करना है कि नई कमिट को केवल उसी से नीचे ले जाना है, जिस पर आप इसे जोड़ना चाहते हैं, और squashइसके बजाय नई कमिट के शब्द को बदल देंpick
MM

क्या होगा अगर मैंने बहुत सारी फ़ाइलों का मंचन किया है, लेकिन मैं केवल एक ही संशोधन के लिए एक जोड़ना चाहता हूं?
dfrankow 16

चरणबद्ध फ़ाइलों (जैसे git reset) के सभी को अनस्टेज करें , फिर जिसको आप जोड़ना चाहते हैं उसे चरणबद्ध करें , प्रतिबद्ध में संशोधन करें, फिर सभी फाइलों को फिर से चरणबद्ध करें।
विलियम पर्ससेल

53

यहाँ एक मनोरंजक फ्लोचार्ट 1 है जो आश्चर्यजनक रूप से भी उपयोगी है: यह मूल प्रश्न और संशोधित "क्या होगा अगर यह अंतिम प्रतिबद्ध नहीं था?" सवाल।

गिट-सुंदर फ्लोचार्ट

1 से लिया http://justinhileman.info/article/git-pretty/


12

पिछली कमिट में एक फ़ाइल जोड़ें

यदि आपने पहले से ही जिस शाखा पर काम कर रहे हैं, उसे धक्का दे दिया है, तो कृपया पहले मैन पेज देखें । विशेष रूप से, कृपया ध्यान दें:

रिबासिंग (या पुनर्लेखन का कोई अन्य रूप) एक शाखा है जिस पर दूसरों का काम आधारित है, यह एक बुरा विचार है: इसके किसी भी व्यक्ति को अपने इतिहास को मैन्युअल रूप से ठीक करने के लिए मजबूर किया जाता है।

हालाँकि, यदि आपने अपनी शाखा को आगे नहीं बढ़ाया है, तो खतरे क्षेत्र में प्रवेश करने की तैयारी करें ।

कमेट हैश का पता लगाएं

सबसे पहले, आपको उस प्रतिबद्ध के हैश को जानना होगा जिसे आप जोड़ना चाहते हैं। इसके द्वारा दिखाया गया है git log। आप वास्तव में जो आप जोड़ना चाहते हैं, उससे पहले प्रतिबद्ध को निर्दिष्ट करना चाहते हैं। (आप इसे सोच सकते हैं कि आप जिस सूचकांक में बदलाव करना चाहते हैं उसके स्लाइस को स्टार्ट इंडेक्स के रूप में।) आप यह सुनिश्चित कर सकते हैं कि आपके पास दौड़ने का अधिकार है git log -1 HEAD~n। जहां 'एन' एक पूर्णांक है, जब तक आप सही कमिटमेंट नहीं लेते हैं। या आप गिन सकते हैं, वास्तव में नहीं।

लेकिन, अगर आप गिनती करते हैं, तो कम से कम पुष्टि करें कि आपके पास git log -1 HEAD~5या जो भी आपकी गिनती थी, उसके साथ आपका अधिकार है । आपको वह प्रतिबद्धता नहीं दिखानी चाहिए जिसे आप जोड़ना चाहते हैं।

डेंजर , हे

अब आप दौड़ने के लिए तैयार हैं git rebase -i HEAD~5। या जो भी आपका कमिट हैश है। यह आपके पसंदीदा टेक्स्ट एडिटर और एडिट करने के लिए एक फाइल लाएगा। फ़ाइल रीबेस कमांड के लिए टूडू सूची है। फ़ाइल में टिप्पणियाँ आपको बताती हैं कि आपके पास क्या विकल्प हैं। बस उस लाइन को खोजें जिसके साथ आप जोड़ना चाहते हैं, और उस लाइन पर 'पिक' को 'एडिट' में बदलें। अब फाइल को सेव करें और बंद करें।

आपके द्वारा इसे संपादित करने के लिए कहे जाने पर पहुंचने पर रिबेस रुक जाएगा। git statusअतिरिक्त जानकारी प्रदान करने के लिए इसे चलाएं । git add .फ़ाइल नाम के साथ कमिट में जोड़ने के लिए अपनी फ़ाइलों को स्टेज करें ।

फिर, करते हैं git commit --amend। यह आपके द्वारा संपादित करने के लिए चुनी गई प्रतिबद्धता में संशोधन करेगा।

अंत में, भागो git rebase --continue

यदि संदेह है, तो लिनक्स पर आप डॉक्स आउटपुट के माध्यम से man git-rebaseया पढ़कर और अधिक जानकारी प्राप्त कर सकते हैं git --help rebase


2
"कमिट हैश ढूंढो" के बारे में। गिनती शुरू करने की जरूरत नहीं। बस git logअपनी कमिटमेंट को खोजने के लिए और उसके हैश को कॉपी करने के git rebase -i hash^लिए उपयोग करें, फिर अपनी पिछली की ओर से रीबेज का उपयोग करें।
विक्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.