सवाल फ़ाइल को अन-जोड़ने के लिए अंतिम प्रतिबद्धता में संशोधन कैसे करें?


मैंने दो फाइलों को संशोधित किया है a, b अंतिम प्रतिबद्धता में। लेकिन फाइल b इसे कम नहीं किया जाना चाहिए, इसे संशोधित करने के लिए वर्कफ़्लो क्या है?


92
2018-01-05 06:43


मूल




जवाब:


अपडेट करें (कुछ साल बाद)

जन ह्यूडेक 

इसे केवल इंडेक्स से हटाने के लिए तुच्छ है।

सच है: आप फ़ाइल को अपनी अनुक्रमणिका सामग्री में आसानी से पर्याप्त रीसेट कर सकते हैं, जैसा कि अधिक हालिया जवाब (द्वारा लिखित मैट Connolly) सुझाव देता है:

git reset HEAD^ path/to/file/to/revert

HEAD^ फ़ाइल को पिछले प्रतिबद्धता में अपनी सामग्री तक पहुंचने की अनुमति देता है से पहले आखरी वाला।

तब आप कर सकते हो git commit --amend, जैसा कि मैंने मूल रूप से नीचे लिखा था।


मूल उत्तर (जनवरी 2011)

यदि यह आपकी आखिरी प्रतिबद्धता है (और आपने इसे कहीं भी धक्का नहीं दिया है), तो आप कर सकते हैं संशोधन यह:
(पहले छिपाना या बचाओ b)

 git commit --amend

फिर बी हटाएं, पुनः प्रतिबद्ध करें। बी बहाल करें और आप कर चुके हैं।

--amend

वर्तमान शाखा की नोक में संशोधन करने के लिए प्रयोग किया जाता है।
  उस पेड़ ऑब्जेक्ट को तैयार करें जिसे आप सामान्य रूप से नवीनतम प्रतिबद्धता को प्रतिस्थापित करना चाहते हैं (इसमें सामान्य -i / -o और स्पष्ट पथ शामिल हैं), और प्रतिबद्ध लॉग संपादक को वर्तमान शाखा की नोक से प्रतिबद्ध संदेश के साथ बीजित किया जाता है।
  आपके द्वारा बनाई गई प्रतिबद्धता वर्तमान टिप को प्रतिस्थापित करती है - यदि यह विलय था, तो वर्तमान माता-पिता के माता-पिता के रूप में माता-पिता होंगे - इसलिए वर्तमान शीर्ष प्रतिबद्धता को त्याग दिया जाता है।


91
2018-01-05 07:08



... Then stash/delete b, re-commit.., यहां शब्द नहीं होना चाहिए Then होना after? - --amend बी के बाद / हटाएं, ... - Xiè Jìléi
@ 谢 继 雷: दूसरे शब्दों में, पहले बी को सहेजें, फिर प्रतिबद्ध करें - फिर से करें, फिर पुनर्स्थापित करें? सच। मैंने जवाब अपडेट किया है। - VonC
गिट इंडेक्स की शक्ति के साथ, किसी को भी फ़ाइल को छीनने / सहेजने के लिए कहकर बस सादा मूर्ख (-1) है। इसे केवल इंडेक्स से हटाने के लिए तुच्छ है। - Jan Hudec
@ जेनहुडक ट्रू, मैंने तदनुसार जवाब संपादित किया है। मैंने उस पुरानी उत्तर का पालन नहीं किया जैसा कि मैं स्टैक ओवरफ़्लो पर करता हूं। एसयू पर 99% गिट प्रश्नों को वैसे भी माइग्रेट किया जाना चाहिए। - VonC


  1. git diff --name-only HEAD^ - (वैकल्पिक) में परिवर्तित फ़ाइलों को सूचीबद्ध करने के लिए उपयोग करें आखिरी प्रतिबद्धता
  2. git reset HEAD^ path/to/file/to/revert - सेवा मेरे रीसेट करें सूची कामकाजी प्रति छोड़कर, उस अंतिम संस्करण के लिए अछूता।
  3. git commit --amend - उस अंतिम प्रतिबद्धता में संशोधन करने के लिए शामिल करें सूची परिवर्तन

56
2018-03-18 04:21



इम्हो यह स्वीकार्य एक बेहतर जवाब है। - mik01aj
ध्यान दें कि आपको उपयोग नहीं करना चाहिए git commit -a --amend (यानी फ़ाइलें जोड़ें नहीं) चरण 3 के लिए, या आप अपनी कार्यशील प्रतिलिपि परिवर्तन करेंगे जो वे संपादन हैं जिन्हें आप निकालने का प्रयास कर रहे हैं। एक वैकल्पिक चरण 2.5 हो सकता है git checkout path/to/file/to/revertअपनी कामकाजी प्रति को भी साफ करने के लिए। - dmnd
वैकल्पिक रूप से git rm --cached path/to/file/to/revert पेड़ से इसे हटाए बिना फ़ाइल को अन-जोड़ने के लिए। - Jan Hudec


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


13
2018-05-06 07:47



@ वॉनसी: संपादन और विभाजन पैच भारी गिट उपयोगकर्ताओं के लिए काफी आम ऑपरेशन है, इसलिए गुई को इसे आसान बनाने के लिए डिज़ाइन किया गया था और इसके लिए आईएमओ सर्वोत्तम उपकरण है। - Jan Hudec
वह काम करता है! मुझे उस विशेष कार्य के लिए अन्य विकल्पों के साथ सफलता नहीं मिली थी। पारितोषिक के लिए धन्यवाद! - Serguzest


अगर आप अपनी आखिरी प्रतिबद्धता से बी को मिटाना चाहते हैं

git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend

यदि आप अपने अंतिम प्रतिबद्धता में बी में सभी परिवर्तनों को हटाना चाहते हैं

(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)

8
2018-05-06 07:34



git rm --cached और बैकअप / बहाल नृत्य (-1) के साथ दूर करो। - Jan Hudec
यह बात बताने के लिए धन्यवाद। मैं यह साझा करना चाहता था कि मैंने यह कैसे किया क्योंकि यह वह दृष्टिकोण था जिसे मैंने पूरे धागे को पढ़ने के बाद भी सबसे सहज महसूस किया था। - pingo


एक विकल्प जिसके लिए इंडेक्स हैकर की आवश्यकता नहीं है, लेकिन फिर भी पुराने प्रतिबद्ध संदेश को संरक्षित करता है:

$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}

मुझे यह पसंद है क्योंकि (ए) यह नियमित रूप से उपयोग किए जाने वाले आदेशों का उपयोग करता है, और (बी) मैं कर सकता हूं git add -p यह पता लगाने के लिए कि मैं क्या करना चाहता हूं।


3
2017-10-27 22:45