विशेष संशोधन पर जाएं


581

मैंने एक निश्चित परियोजना के एक गिट रिपॉजिटरी पर क्लोन किया। क्या मैं फ़ाइलों को प्रारंभिक स्थिति में बदल सकता हूं और जब मैं समीक्षा करता हूं तो फाइलें 2, 3, 4 ... सबसे हाल ही में पुनरीक्षण पर जाती हैं? मैं इस बात का अवलोकन करना चाहता हूं कि परियोजना कैसे विकसित हो रही थी।

जवाबों:


872

git checkout <sha1>किसी विशेष प्रतिबद्धता की जांच करने के लिए उपयोग करें ।


2
आप ऐसा कर सकते हैं git log -n1। लेकिन जब तक git checkoutअसफल नहीं होता, यह प्रयास की बर्बादी है।
मार्सेलो कैंटोस

2
यह काम करता हैं। मुझे पूर्ण sha1 (आंशिक नहीं) का उपयोग करना था। और अगर मैं परियोजना को दूसरे संशोधन में रखना चाहता हूं? git logअब केवल पहला कमिट दिखाता है, क्या मुझे अगले कमिट का पता लग सकता है?
xralf

6
विशिष्टता की गारंटी के लिए आपको केवल sha1 का पर्याप्त उपयोग करना चाहिए। शायद आपके साथ एक अशुभ संयोग था। Git को "अगले" प्रतिबद्ध की कोई अवधारणा नहीं है; इतिहास एक DAG है जिसमें सभी तीर पीछे की ओर इशारा करते हैं। आपको git log --onelineआउटपुट को एक पाठ फ़ाइल में संदर्भ के लिए चलाना चाहिए और चिपका देना चाहिए (संक्षिप्त शम्स इसे प्रदान करता है जो अद्वितीय होने की गारंटी है)। एक अन्य विकल्प, यदि आपका इतिहास रैखिक है, तो यह पता लगाने के लिए कि पहले कमिट से कितने कमिट हैं masterऔर उपयोग git checkout master~543(यदि 543 कमिट हैं), तो git checkout master~542, आदि
मार्सेलो कैंटोस

19
और "git चेकआउट <sha1>" से वर्तमान में वापस चेकआउट कैसे करें?
ッ ク

6
@AlexanderSupertramp शाखा की जाँच करें।
मार्सेलो कैंटोस

50

एक विशेष संस्करण में जाने के लिए / आदेशों के बाद कमिट रन करें। HASH-CODE से आप प्राप्त कर सकते हैंgit log --oneline -n 10

git reset --hard HASH-CODE

नोट - विशेष संस्करण / कमिट पर रीसेट करने के बाद git pull --rebase, आप चला सकते हैं , यदि आप उन सभी कमिटों को वापस लाना चाहते हैं, जिन्हें छोड़ दिया गया है।


1
ध्यान दें कि resetग्राफ़ में किसी विशेष बिंदु को केवल चेकआउट नहीं करता है, यह आपकी वर्तमान में जाँच की गई शाखा को भी स्थानांतरित करेगा
Liam

इसके साथ ही reset, आपके सभी लंबित परिवर्तन छोड़ दिए जाते हैं।
विलियमके

2
-हार्ड फ्लैग को हैश के बाद किसी भी तरह के कमिट को डिलीट कर दिया जाएगा .... शायद वह उस छोटे से tid बिट को यहाँ जोड़ना चाहता है। मुझे यकीन है कि लोगों ने इतिहास खो दिया है और सोचा है कि क्यों।
उर्सक्वायरेल

git pull --rebaseकेवल तभी काम करता है जब आपके पास अपने रेपो के लिए रिमोट हो और यह अप टू डेट हो।
कीथ थॉम्पसन

19

आप जैसे उपकरण के साथ परियोजना के इतिहास का एक चित्रमय दृश्य प्राप्त कर सकते हैं gitk। बस दौडो:

gitk --all

यदि आप एक विशिष्ट शाखा की जांच करना चाहते हैं:

git checkout <branch name>

एक विशिष्ट वचनबद्धता के लिए, शाखा नाम के बजाय SHA1 हैश का उपयोग करें। ( Git सामुदायिक पुस्तक में ट्रीशेस देखें , जो एक अच्छा पढ़ा गया है, अपने पेड़ को नेविगेट करने के अन्य विकल्पों को देखने के लिए।)

git log विस्तृत या सारांश इतिहास को प्रदर्शित करने के लिए विकल्पों का एक पूरा सेट है।

मैं एक प्रतिबद्ध इतिहास में आगे बढ़ने का एक आसान तरीका नहीं जानता । एक रेखीय इतिहास वाली परियोजनाएं शायद यह सब आम नहीं हैं। एसवीएन या सीवीएस के साथ आपके पास "संशोधन" का विचार गीट में अच्छी तरह से नहीं दिखता है।


2
अवगत रहें: git आपको परियोजना का एक भी रैखिक इतिहास देकर आपसे झूठ नहीं बोलेगा। जब तक कि परियोजना वास्तव में उस तरह से विकसित नहीं हुई है।
एंड्रेस जान टैक

आगे बढ़ना तार्किक रूप से व्यर्थ है (एक रेखीय इतिहास में भी), क्योंकि एक प्रतिबद्ध "भविष्य" का कोई संदर्भ नहीं देता है। सबसे अच्छे रूप में, आप उन सभी कमिटों की पहचान कर सकते हैं, जो एक माता-पिता के रूप में प्रश्न में प्रतिबद्ध हैं। आप पर ध्यान दें, मर्ज के कारण पीछे की ओर बढ़ना कोई तुच्छ व्यायाम नहीं है।
मार्सेलो कैंटोस

5

एक कमेटी SHA1 कुंजी का उपयोग करके, आप निम्न कार्य कर सकते हैं:

  • सबसे पहले, एक विशिष्ट फ़ाइल के लिए इच्छित कमिटमेंट खोजें:

    git log -n <# commits> <file-name>

    यह, आपके आधार पर <# commits>, एक विशिष्ट फ़ाइल के लिए कमिट की एक सूची उत्पन्न करेगा।

    TIP: यदि आप सुनिश्चित नहीं हैं कि आप क्या कमिट कर रहे हैं, तो यह पता लगाने का एक अच्छा तरीका निम्नलिखित कमांड का उपयोग कर रहा है git diff <commit-SHA1>..HEAD <file-name>:। यह कमांड एक कमिट के मौजूदा वर्जन और एक विशिष्ट फाइल के लिए एक कमिट के पिछले वर्जन के बीच के अंतर को दिखाएगा।

    नोट: एक प्रतिबद्ध SHA1 कुंजी स्वरूपित है git log -n सूचीबद्ध किया गया है:

प्रतिबद्ध <SHA1 id>

  • दूसरा, वांछित संस्करण की जाँच करें:

    यदि आपको मनचाहा कमिट / वर्जन मिल गया है, तो बस कमांड का उपयोग करें: git checkout <desired-SHA1> <file-name>

    यह आपके द्वारा स्टेजिंग क्षेत्र में निर्दिष्ट फ़ाइल के संस्करण को रखेगा। इसे मंचन क्षेत्र से बाहर निकालने के लिए बस कमांड का उपयोग करें:reset HEAD <file-name>

दूरस्थ रिपॉजिटरी को इंगित करने के लिए वापस लौटने के लिए, बस कमांड का उपयोग करें: git checkout HEAD <file-name>


2

मैं एक ऐसी स्थिति में था, जहां हमारे पास एक मास्टर शाखा है, और फिर 17.0 नामक एक और शाखा है और इस 17.0 के अंदर एक प्रतिबद्ध हैश है "XYZ" नहीं । और ग्राहक को उस XYZ संशोधन तक एक निर्माण दिया जाता है। अब हम एक बग भर में आ गए और उस ग्राहक के लिए हल किया जाना चाहिए। इसलिए हमें उस "xyz" हैश तक उस ग्राहक के लिए अलग शाखा बनाने की आवश्यकता है। तो यहाँ है कि मैंने यह कैसे किया।

पहले मैंने अपने स्थानीय मशीन पर उस ग्राहक के नाम के साथ एक फ़ोल्डर बनाया। ग्राहक का नाम "एएए" है एक बार उस फ़ोल्डर को इस फ़ोल्डर के अंदर कमांड के बाद मुद्दा बनाया जाता है:

  1. git init
  2. git क्लोन इस कमांड के बाद आप मास्टर ब्रांच पर होंगे। तो वांछित शाखा में स्विच करें
  3. git checkout 17.0 यह आपको उस शाखा तक पहुंचाएगा जहां आपकी प्रतिबद्धता मौजूद है
  4. git checkout यह हैश कमिट तक आपकी रिपॉजिटरी ले जाएगा। उर ब्रांच का नाम बदलकर उस कमेट हैश नं। अब इस हैश को एक शाखा का नाम दें
  5. git Branch ABC यह आपके स्थानीय मशीन पर एक नई शाखा बनाएगा।
  6. गिट चेकआउट एबीसी
  7. git धक्का मूल ABC यह इस शाखा को दूरस्थ रिपॉजिटरी में धकेल देगा और git सर्वर पर एक शाखा बनाएगा। आप कर चुके हैं।

1

एक तरीका यह होगा कि पेटिंग के लिए बनाए गए सभी कमिट बनाए जाएं। प्रारंभिक प्रतिबद्ध जांच करें और फिर पढ़ने के बाद पैच लागू करें।

उपयोग करें git format-patch <initial revision>और फिर git checkout <initial revision>। आपको अपने निर्देशक में चार अंकों से शुरू होने वाली फाइलों का ढेर मिलना चाहिए जो पैच हैं।

जब आप अपने संशोधन को पढ़ रहे हों तो बस वही करें git apply <filename>जो आपको दिखना चाहिए git apply 0001-*और गिनना चाहिए ।

लेकिन मुझे वास्तव में आश्चर्य है कि आप इसके बजाय पैच को ही क्यों पढ़ना चाहेंगे? कृपया इसे अपनी टिप्पणियों में पोस्ट करें क्योंकि मैं उत्सुक हूं।

गिट मैनुअल मुझे यह भी देता है:

git show next~10:Documentation/README

फ़ाइल दस्तावेज़ीकरण / README की सामग्री को दिखाता है क्योंकि वे शाखा की अगली 10 वीं अंतिम बैठक में वर्तमान थे।

आप एक नज़र भी रख सकते हैं git blame filenameजो आपको एक सूची देता है जहाँ प्रत्येक पंक्ति एक प्रतिबद्ध हैश + लेखक से जुड़ी होती है।


1

एक विशिष्ट प्रतिबद्ध कोड प्राप्त करने के लिए, आपको उस कमिट के हैश कोड की आवश्यकता है । आप उस हैश कोड को दो तरीकों से प्राप्त कर सकते हैं:

  1. इसे अपने गिठुब / गीताब / बिटबकेट खाते से प्राप्त करें। (यह आपके प्रतिबद्ध url पर है, अर्थात्: github.com/user/my_project/commit/ प्रतिबद्ध_ hash_code ), या आप कर सकते हैं
  2. git logऔर उस शाखा पर अपने हाल के आवागमन की जांच करें। यह आपको आपके कमिट का हैश कोड और आपके द्वारा कोड करते समय आपके द्वारा लीक किए गए संदेश को दिखाएगा। बस नकल करो और फिर करोgit checkout commit_hash_code

उस कोड पर जाने के बाद, यदि आप उस पर काम करना चाहते हैं और परिवर्तन करना चाहते हैं, तो आपको एक और शाखा बनानी चाहिए git checkout -b <new-branch-name>, अन्यथा, परिवर्तन बनाए नहीं रखा जाएगा।


0

एक प्रतिबद्ध जांच करने के लिए (nb आप अतीत को देख रहे हैं!)।

  • git checkout "commmitHash"

एक कमिट से क्रूरतापूर्वक पुनः आरंभ करने के लिए और बाद में उन शाखाओं को हटा दें जिन्हें आपने संभवतः गड़बड़ कर दिया था।

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