2009-05-23 9 views
59

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

  • जाओ एक से उस फ़ाइल को सिर के पिछले प्रतिबद्ध

  • वापस HEAD

इस बारे में जाने का सबसे अच्छा तरीका क्या है में उस फ़ाइल को कमिट?

+1

सबसे आसान कॉपी करने के लिए किया जाएगा उस ui क्लाइंट (या गीथब बिटबकेट आदि से) का उपयोग करके उस विशेष प्रतिबद्धता से फ़ाइल सामग्री और इसे अपनी वर्तमान फ़ाइल में पेस्ट करें और प्रतिबद्ध करें :) हैश और पथ – nawfal

उत्तर

91

आप व्यावहारिक रूप से यह अपने आप को कहा है:

पहले फ़ाइल वापस पाने के एक से प्रतिबद्ध से पहले:

$> git checkout HEAD~1 path/to/file.ext 

तो यह प्रतिबद्ध:

$> git commit -a -m 'Retrieved file from older revision' 

तो केवल वही में परिवर्तन फ़ाइल जहां अंतिम प्रतिबद्धता में मौजूद है, आप git-revert का उपयोग भी कर सकते हैं:

$> git revert HEAD 

मुझे लगता है कि यह एक अलग प्रतिबद्धता बनाना बेहतर होगा, क्योंकि यह आपको बताता है कि आपने वास्तव में क्या किया है, और क्यों। हालांकि, आप --amendgit-commit पर स्विच करके पिछली प्रतिबद्धता में इसे स्क्वैश कर सकते हैं।

+0

लिखने से आसान - गिट गिट प्रतिबद्धता के लिए एक स्विच होगा, गिट एड नहीं – bdonlan

+0

ओह, आप सही हैं। फिक्स्ड। – sykora

+0

गिट-रिवर्ट * * एक अलग प्रतिबद्धता करेगा (यह आपके विवरण से पूरी तरह स्पष्ट नहीं था)। "गिट प्रतिबद्ध --amend" का उपयोग करके एक नया निर्माण करने के बजाय अंतिम प्रतिबद्धता को सही करेगा (लेकिन यदि आप इतिहास के इस हिस्से को प्रकाशित करते हैं तो आप ऐसा नहीं कर सकते हैं) –

0

सावधान रहो, इस परिदृश्य में:

Commit hash - File modified 
aaaaaaa  index.php 
bbbbbbb  test.php 
ccccccc  index.php 

Git चेकआउट HEAD ~ 1 (या HEAD ^) index.php पिछले HEAD हैश (bbbbbbb) को index.php फ़ाइल चेकआउट करने की कोशिश, लेकिन यह नहीं है वास्तविक पिछली प्रतिबद्ध हैश फ़ाइल, सीसीसीसीसी है। पिछले हेड हैश में, index.php अभी भी अपरिवर्तित बनी हुई है क्योंकि आखिरी बदलाव हैश सीसीसीसीसी में बनाया गया था।

पिछले करने के लिए कुछ फ़ाइल वापस जाने के लिए हैश उस फ़ाइल, उपयोग प्रभावित प्रतिबद्ध:

git log -n 2 --pretty=format:%h path/to/file.ext 

पहले हैश पर ध्यान न दें और दूसरा हैश लेते हैं, तो:

git checkout <second_hash> path/to/file.ext 
git commit -m 'Revert this file to real previous commit' 
संबंधित मुद्दे