मैं लंबे समय से गिट का उपयोग कर रहा हूं, लेकिन हाल ही में दिलचस्प चाल का सामना करना पड़ा जो आपको विलय के दौरान फ़ाइल परिवर्तन इतिहास को वापस करने की अनुमति देता है। यहाँ ठीक करने के चरण है:गिट विवादों के साथ विलय के दौरान फ़ाइल परिवर्तन इतिहास खोने की अनुमति देता है
मैं दो फ़ाइलों के साथ Git भंडार है और एक प्रतिबद्ध:
$ git branch
* master
$ git log --oneline
80c8d5a Initial commit
$ git log --oneline -- README
80c8d5a Initial commit
$ ls
README conflict_file
मैं नए प्रयोगात्मक शाखा बना रहा हूं और README और conflict_file फ़ाइल को बदलने:
$ checkout -b experiment
Switched to branch 'experiment'
$ vim README
$ vim conflict_file
$ git commit -am "Experimental changes"
[experiment cdbc988] Experimental changes
2 files changed, 2 insertions(+)
$ git log --oneline -- README
cdbc988 Experimental changes
80c8d5a Initial commit
$ git checkout master
Switched to branch 'master'
$ vim conflict_file
$ git commit -am "Master changes"
[master ad8b68e] Master changes
1 file changed, 1 insertion(+)
:
मास्टर शाखा और संपादित conflict_file करने के लिए वापस जा रहे हैं (मर्ज के दौरान संघर्ष करने के लिए)
निम्नलिखित में मेरी भंडार की स्थिति:
$ git log --oneline --decorate --graph --all
* ad8b68e (HEAD, master) Master changes
| * cdbc988 (experiment) Experimental changes
|/
* 80c8d5a Initial commit
प्रयोगात्मक शाखा के साथ विलय करने के लिए कोशिश कर रहा है:
$ git merge experiment
Auto-merging conflict_file
CONFLICT (content): Merge conflict in conflict_file
Automatic merge failed; fix conflicts and then commit the result.
$ git mergetool
<merging conflict in conflict_file>
यहाँ है चाल:
$ git reset HEAD README
Unstaged changes after reset:
M README
$ git commit
[master 909139f] Merge branch 'experiment'
$ git log --oneline -- README
80c8d5a Initial commit
मैं परिवर्तन खो और का इतिहास README फ़ाइल जो प्रयोगात्मक शाखा में पेश की गई थी प्रायोगिक परिवर्तन प्रतिबद्ध। क्या कोई टिप्पणी कर सकता है कि यह इस विचार से कैसे संबंधित है कि गिट को सभी बदलावों के बारे में पता है? क्या इस परिदृश्य से बचना संभव है? यह हमारी कंपनी में एक समस्या बन सकता है, क्योंकि मर्ज डेवलपर्स के लिए ऑपरेशन की अनुमति है, लेकिन वे गलती से किसी के परिवर्तन को हटा सकते हैं।
'गिट लॉग' करने के लिए '--full-history' विकल्प आज़माएं। _history simplification_ के बारे में मैन पेज को भी पढ़ें: "डिफ़ॉल्ट मोड ... पेड़ की अंतिम स्थिति को समझाते हुए सबसे सरल इतिहास।" – chirlu
आप क्यों आश्चर्यचकित हैं कि 'README' फ़ाइल में किए गए परिवर्तन चले गए हैं? आपने स्पष्ट रूप से अनुरोध किया है कि 'गीट रीसेट हेड रीडमे' के साथ होने के लिए। – Chronial
'git log --follow - 'को आमंत्रित करना' –
erkfel