मैं किसी खास Git व्यवहार के बारे में एक भ्रम की स्थिति होने:Git नाम बदलने/हटाने भ्रम
के बाद कदम और स्थिति (कमांड की सूची भी बाद में दिए गए हैं) कर रहे हैं:
- मैं दो शाखाएं हैं: मास्टर और एक्सब्रैंच
- उनमें से दोनों में एक फ़ाइल src/a.txt है। यह सामग्री "पुरानी सामग्री"
- एक्सब्रैंच में मैं src/b.txt से src/b.txt का नाम बदलता हूं:
mv
,git rm
,git add
। मास्टर में फ़ाइल a.txt का नाम बदलें। प्रतिबद्ध के दौरान मैं
git rm src/a.txt
किया, लेकिनgit add src/b.txt
मास्टर में करना भूल मुझे क्या करना:git rm src/a.txt
औरgit commit
मास्टर में, मैं फ़ाइल b.txt की सामग्री को संपादित करने के लिए "
New Content
- मास्टर में मैं
git add src/b.txt
करते हैं औरgit commit
- मास्टर में मुझे क्या करना:
git merge XBranch
फ़ाइल src/b.txt संघर्ष, जो पूरी तरह से संयुक्त राष्ट्र है derstandable। लेकिन सामग्री "Old Content
" है। क्यूं कर?
<<<<<<< HEAD
New Content
=======
Old content
>>>>>>> XBranch
कमांड की सूची::
क्यों नहीं यह कुछ की तरह है
[email protected] d:/merge_temp/test/case2
$ mkdir source
[email protected] d:/merge_temp/test/case2
$ git init
Initialized empty Git repository in d:/merge_temp/test/case2/.git/
[email protected] d:/merge_temp/test/case2 (master)
$ mkdir src
[email protected] d:/merge_temp/test/case2 (master)
$ vi src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ cat src/a.txt
Old Content
[email protected] d:/merge_temp/test/case2 (master)
$ git add src/
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master (root-commit) 148500e] added src/a.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git branch XBranch
[email protected] d:/merge_temp/test/case2 (master)
$ git checkout XBranch
Switched to branch 'XBranch'
[email protected] d:/merge_temp/test/case2 (XBranch)
$ mv src/a.txt src/b.txt
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git rm src/a.txt
rm 'src/a.txt'
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git add src/b.txt
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git commit
[XBranch b3ff8fa] changed a.txt to b.txt in XBranch
1 files changed, 0 insertions(+), 0 deletions(-)
rename src/{a.txt => b.txt} (100%)
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git checkout master
Switched to branch 'master'
[email protected] d:/merge_temp/test/case2 (master)
$ mv src/a.txt src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git rm src/a.txt
rm 'src/a.txt'
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master bfeaecb] removed src/a.txt
1 files changed, 0 insertions(+), 1 deletions(-)
delete mode 100644 src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ vi src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ cat src/b.txt
New Content
[email protected] d:/merge_temp/test/case2 (master)
$ git add src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master 2361d5e] changed content of b.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git merge XBranch
CONFLICT (rename/delete): Rename src/a.txt->src/b.txt in XBranch and deleted in HEAD
Automatic merge failed; fix conflicts and then commit the result.
[email protected] d:/merge_temp/test/case2 (master|MERGING)
$ cat src/b.txt
Old Content
लेकिन फिर कैसे तार्किक है यह निम्न स्थिति से अलग : 1. मैं "पुरानी सामग्री" के साथ मास्टर में एक फ़ाइल a.txt जोड़ता हूं और इसे प्रतिबद्ध करता हूं। 2. मैं "नई सामग्री" के साथ XBranch में एक फ़ाइल a.txt जोड़ता हूं और इसे प्रतिबद्ध करता हूं। 3. मैं एक्सब्रांच को मास्टर में विलय करता हूं। इस बार यह उस फ़ाइल में दोनों सामग्री दिखा रहा है! – Sabya
@ सब्बिया: इस बार, दोनों पेड़ (शाखाओं 'मास्टर' और 'एक्सब्रैंच' में 'केस 2' निर्देशिका) एक * नई * फ़ाइल' a.txt' संदर्भित करती है: इसकी सामग्री विवाद समाधान के साथ विलय हो जाती है। इससे पहले, ** 'a.txt' ** (जिसे 'b.txt' के नाम से बदला गया) और एक नया **' b.txt' ** के बीच एक संघर्ष था: दोनों फाइलें उसी शाखा में मौजूद नहीं हो सकतीं, एक विकल्प (फ़ाइल का, फाइल सामग्री नहीं) को बनाना था। – VonC
मेरे प्रश्न के चरण 4 में, यदि मैं एक ही प्रतिबद्धता में "गिट आरएम" और "गिट एड" करता हूं, तो यह काम करता है जैसा कि मैं उम्मीद करता हूं! मैं अब समझने में असफल रहा हूं। मैं भविष्यवाणी कैसे कर सकता हूं कि फ़ाइल में दोनों सामग्रियां होंगी? जब इसमें एक्सब्रैंच की सामग्री होगी और इसमें मास्टर की सामग्री कब होगी? – Sabya