2012-10-03 15 views
14

क्या आप पिछली प्रतिबद्धता पूर्ववत कर सकते हैं, जिसे लंबे समय से आपके गिट कमांड में विलय कर दिया गया है, एक गिट कमांड के माध्यम से? या क्या आपको उस प्रतिबद्धता में किए गए सभी परिवर्तनों को मैन्युअल रूप से पूर्ववत करना होगा?एक गिट प्रतिबद्धता पूर्ववत करें

git revert <commit-id> 

टिप्पणी इस बनाता है कि एक नई प्रतिबद्ध, नाश सिर्फ उन परिवर्तनों

जैसे:

+1

के लिए --soft के स्थान पर --hard का प्रयोग करें --amend' प्रतिबद्ध है 'Git पर एक नज़र पिछले प्रतिबद्ध या' Git revert' जहां प्रतिबद्ध आप वापस जाना चाहते हैं की आईडी सेट कर सकते हैं modifiy करने के लिए। यूनियन 'गिट लॉग' [गिट अमेन्ड] के साथ प्रतिबद्धता आईडी का पता लगा सकता है (http://git-scm.com/book/en/Git-Basics-Undoing-Things) [गिट रिवर्ट] (http: // gitready। कॉम/इंटरमीडिएट/200 9/03/16/रोलिंग-बैक-चेंज-साथ-revert.html) – dasheddot

उत्तर

19

तुम हमेशा सिर्फ परिवर्तन एक भी से कार्य करके प्रतिबद्ध वापस कर सकते हैं git log --oneline

d806fc9 two 
18cdfa2 bye 
62c332e hello 
c7811ee initial 

कहो मैं परिवर्तन पूर्ववत करना चाहते प्रतिबद्ध में 18cdfa2:

git revert 18cdfa2 

हम अब है: git log -1 -p

commit fb9d6627a71636503fc9a1eb4f725937c783ecee 
Author: Seth <[email protected](none)> 
Date: Wed Oct 3 10:32:46 2012 +0200 

    Revert "bye" 

    This reverts commit 18cdfa27c964b66b624be1030250757b745d6866. 

diff --git a/a b/a 
index 0907563..3b18e51 100644 
--- a/a 
+++ b/a 
@@ -1 +1 @@ 
-bye world 
+hello world 
10

तुम हमेशा git revert <commit-hash> कर सकते हैं पूर्ववत करने के लिए एक Git प्रतिबद्ध। हालांकि, ज्यादातर मामलों में यह सहायक नहीं है क्योंकि यह आपके गिट रीफ्लॉग में एक नई प्रतिबद्धता जोड़ता है।

मुझे आमतौर पर क्या करना है जब मुझे पीछे हटना है, मेरी शाखा को पहले चरण में रीसेट कर दिया गया है। ऐसा करने के लिए, एक गिट रीफ्लॉग करें और उस HEAD स्थिति की तलाश करें जिसे आप स्थानांतरित करना चाहते हैं।

[email protected]:~/myrepo$ git reflog -3 
8d386b8 [email protected]{0}: commit: I did something I don't want 
2a59955 [email protected]{1}: commit: Feedback from PR #792 
1023102 [email protected]{2}: checkout: moving from one branch to another 

अब, मैं हैश 2a59955 प्रतिबद्ध और 8d386b8 में सभी परिवर्तनों को पूर्ववत् करने स्थानांतरित करने के लिए चाहते हैं। मैं करूँगा:

Update: git reset --soft [email protected]{1} 

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

यह आपके सभी परिवर्तनों को पूर्ववत कर देगा। समय पर वापस जाने के लिए एक कठिन रीसेट है (कम से कम एक गिट बिंदु दृश्य से)। इस

+1

मैं तर्क दूंगा कि यह आंशिक रूप से * देय * है क्योंकि यह एक नई प्रतिबद्धता बनाता है। क्या होगा यदि आप अपने पूर्ववत करना पूर्ववत करना चाहते हैं? क्या होगा यदि आप बाद में जागरूक होना चाहते हैं कि आपने वापस कर दिया है? भी, किसी को + पुशिंग करने का जिक्र करना चाहिए, क्योंकि रीसेटिंग ही प्रतिबद्धता इतिहास को बदल नहीं देती है। – eis

+0

हां, यह नहीं है और मैं सहमत हूं कि रिवर्ट किए गए कार्यों का इतिहास भी महत्वपूर्ण है। रीसेट करना मदद करता है जब आप एक कदम पीछे हटना चाहते हैं और अंतिम स्थिति से शुरू करना चाहते हैं। साथ ही, रीसेट करना आपके लॉग में रहता है और ऐसा नहीं है कि आप पूरी तरह से प्रतिबद्धता मिटा दें। – rizwaniqbal

+3

सॉफ़्ट! आप सॉफ़्ट का उपयोग करते हैं! आप उस आदेश के साथ अपने परिवर्तन खो देते हैं। मैं एक प्रतिबद्धता को पूर्ववत करने के लिए देख रहा था जो बहुत अधिक प्रतिबद्ध था (लानत, इंटेलिज) तो यहां अगले व्यक्ति के लिए एक चेतावनी है। – cmp

संबंधित मुद्दे