git - किसी विशेष फ़ाइल को एक विशिष्ट पुनरीक्षण के लिए रीसेट करना या वापस करना Git का उपयोग करना है?




14 Answers

आप चाहते हैं कि प्रतिबद्ध के हैश c5f567 :

git checkout c5f567 -- file1/to/restore file2/to/restore

जीआईटी चेकआउट मैन पेज अधिक जानकारी देता है।

यदि आप c5f567 से पहले प्रतिबद्धता वापस करना चाहते हैं, तो जोड़ें ~1 (किसी भी संख्या के साथ काम करता है):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

एक साइड नोट के रूप में, मैं हमेशा इस कमांड के साथ असहज महसूस करता हूं क्योंकि इसका उपयोग दोनों सामान्य चीजों (शाखाओं के बीच में बदलना) और असामान्य, विनाशकारी चीजों (कार्यरत निर्देशिका में परिवर्तनों को छोड़ना) के लिए किया जाता है।

मैंने एक फाइल में कुछ बदलाव किए हैं जो कुछ समय के लिए फ़ाइलों के एक समूह के रूप में प्रतिबद्ध हैं, लेकिन अब एक पिछली संस्करण में इसे फिर से रीसेट / वापस करना चाहते हैं।

मैंने एक git log के साथ एक git log के साथ किया है, जिसमें संशोधन की आवश्यकता है, लेकिन मुझे यह नहीं पता है कि फाइल कैसे वापस अपने पूर्व राज्य को अतीत में वापस लेनी चाहिए।




आप किसी भी संदर्भ का उपयोग गिट कमिट के लिए कर सकते हैं, जिसमें एसएचए -1 भी शामिल है, यदि यह सबसे सुविधाजनक है। मुद्दा यह है कि कमांड इस तरह दिखती है:

git checkout [commit-ref] -- [filename]




और अंतिम प्रतिबद्ध संस्करण को वापस करने के लिए, जो सबसे अधिक बार आवश्यक है, आप इस सरल आदेश का उपयोग कर सकते हैं।

git checkout HEAD file/to/restore



यदि आप जानते हैं कि आपको कितने लोग वापस जाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

git checkout master~5 image.png

यह मानता है कि आप master शाखा पर हैं, और आपके द्वारा जो संस्करण चाहते हैं, वह 5 वापस करता है।




यह मेरे लिए काम किया:

git checkout <commit hash> file

फिर परिवर्तन करना:

git commit -a



आम तौर पर, 'जीआईटी चेकआउट फू' ​​काम नहीं करेगा यदि काम की गई कॉपी एक नामित निर्देशिका में है; हालांकि, दोनों 'जीआईटी चेकआउट हेड एफयू' और 'जीआईटी चेकआउट। / एफयू' होगा:

$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D   foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo



मुझे यहां इज़ीजीट को प्लग करना होगा , जो अनुभवी उपयोगकर्ताओं को भ्रमित किए बिना जीआईटी को नौसिखियों तक पहुंचने के लिए एक आवरण है। ऐसा करने वाली चीजों में से एक यह है कि git revert लाने के लिए और अधिक अर्थ हैं । इस मामले में, आप बस कहेंगे:

eg revert foo/bar foo/baz




नोट, हालांकि, कि git checkout ./foo और git checkout HEAD ./foo वास्तव में एक ही बात नहीं है ; इसका स्पष्ट उदाहरण:

$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A

(दूसरा सूचकांक में फाइल को add , लेकिन यह प्रतिबद्ध नहीं होता है।)

Git checkout ./foo अर्थ है पथ को वापस। / ./foo सूचकांक से ; जोड़कर HEAD जीआईटी को ऐसा करने से पहले सूचकांक में उस पथ को उसके HEAD संशोधित करने के लिए वापस करने का निर्देश दिया था।




फ़ाइल के पिछले पिछले संस्करण पर जाने के लिए, कमांड नंबर प्राप्त करें, फिर eb917a1 कहें

git checkout eb917a1 YourFileName

अगर आपको बस पिछले समर्पित संस्करण पर वापस जाने की आवश्यकता है

git reset HEAD YourFileName
git checkout YourFileName

यह आपको फाइल की अंतिम प्रतिबद्ध स्थिति पर ले जाएगा




लक्ष्य फ़ाइल के लिए पहले रीसेट हेड

git reset HEAD path_to_file

दूसरा चेकआउट उस फ़ाइल

git checkout -- path_to_file



मेरे लिए जवाब में से कोई भी वास्तव में स्पष्ट नहीं था और इसलिए मैं मेरा जोड़ना चाहता हूं जो सुपर आसान लगता है

मेरे पास abc1 कमिट है और इसके बाद मैंने फ़ाइल ( file.txt ) में कई (या एक संशोधन) किया है।

अब कहते हैं कि मैंने file.txt फाइल में कुछ गड़बड़ कर दी है और मैं पिछला abc1 वापस जाना चाहता हूं।

1. git checkout file.txt : यह स्थानीय परिवर्तनों को हटा देगा, अगर आपको उनकी आवश्यकता नहीं है

2. git checkout abc1 file.txt : यह आपकी git checkout abc1 file.txt संस्करण में आपकी फ़ाइल लाएगा

3. git commit -m "Restored file.txt to version abc1" : यह आपके उत्क्रमण को कम कर देगा।

  1. git push : यह सब कुछ रिमोट रिपॉजिटरी पर धक्का होगा

बेशक चरण 2 और 3 के बीच आप क्या कर रहे हैं यह समझने के लिए git status कर सकते हैं। आम तौर पर आपको पहले ही जोड़ दिया गया file.txt देखना चाहिए और यही कारण है कि इसमें कोई git add की कोई ज़रूरत नहीं है।




जाहिर है किसी को या तो git पर एक सुगम पुस्तक लिखने की जरूरत है, या git को दस्तावेज़ीकरण में बेहतर समझाया जाना चाहिए। इस एक ही समस्या का सामना करना पड़ा मैं अनुमान लगाया कि

cd <working copy>
git revert master

आखिरी प्रतिबद्धता को पूर्ववत करेगा जो कि ऐसा प्रतीत होता है

इयान




यहां कई उत्तर git reset ... <file> या git checkout ... <file> का उपयोग करने का दावा करते हैं, लेकिन ऐसा करने से, आप <file> पर प्रत्येक संशोधनों को खो देंगे, जो आपके द्वारा वापस लौटना चाहते हैं।

अगर आप केवल एक फ़ाइल पर एक प्रतिबद्ध से बदलावों को वापस करना चाहते हैं, जैसे कि git revert करना होता है, लेकिन केवल एक फाइल के लिए होता है (या कमेट्स के कमेट्स का कहना है), मैं दोनों git diff का उपयोग करने का सुझाव देता हूं और git apply तरह git apply हैं ( <sha> = आप को वापस करना चाहते हैं, यह प्रतिबद्ध के हैश के साथ):

git diff <sha>^ <sha> path/to/file.ext | git apply -R

असल में, यह पहले उन परिवर्तनों के अनुरूप पैच उत्पन्न करेगा जो आप वापस करना चाहते हैं, और फिर उन परिवर्तनों को छोड़ने के लिए पैच को उलटा-लागू करें

बेशक, यह काम नहीं करेगा, अगर लौटे हुए लाइनों को <sha1> और HEAD (संघर्ष) के बीच किसी भी प्रतिबद्धता से संशोधित किया गया हो।




यहाँ मेरा रास्ता है

क) एंड्रॉइड स्टूडियो में, फ़ाइल खोलें

बी) जीआईटी -> इतिहास दिखाएं, पिछली प्रतिबद्ध को ढूंढें जिसे मैं वापस करना चाहता हूं। Commit_id (यानी प्रतिबद्ध हैश) प्राप्त करें

सी) git checkout commit_id file_path




Related