ich eine Verwirrung über ein spezielles git Verhalten:git Umbenennungs/löschen Verwirrung
Im Folgenden sind die Schritte und Situation sind (die Liste der Befehle werden auch später angegeben):
- Ich habe zwei Zweige: Master und XBranch
- Es gibt eine Datei src/a.txt in beiden. Es ist Inhalt "Alter Inhalt"
- In XBranch benenne ich src/a.txt zu src/b.txt um, indem ich:
mv
,git rm
,git add
. Benennen Sie im Master die Datei a.txt um. Während zu begehen habe ich
git rm src/a.txt
aber vergessengit add src/b.txt
Im Master zu tun tun I:git rm src/a.txt
undgit commit
Im Master, bearbeite ich den Inhalt der Datei b.txt auf "
New Content
- Im Master muss ich
git add src/b.txt
undgit commit
- Im Master I tun:
git merge XBranch
Die Datei src/b.txt Konflikte, die perfekt un ist beständig. Aber der Inhalt ist "Old Content
". Warum?
Warum nicht ist es so etwas wie:
<<<<<<< HEAD
New Content
=======
Old content
>>>>>>> XBranch
Liste der Befehle:
[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
Aber wie logisch unterscheidet es sich von der folgenden Situation : 1. Ich füge eine Datei a.txt im Master mit "Old Content" hinzu und beende sie. 2. Ich füge eine Datei a.txt in XBranch mit "Neuer Inhalt" hinzu und übertrage es. 3. Ich füge XBranch in Master. Diesmal zeigt es beide Inhalte in dieser Datei! – Sabya
@Sabaya: diesmal verweisen beide Bäume (das 'case2' -Verzeichnis in den Zweigen' master' und 'XBranch') auf eine * neue * Datei' a.txt': ihr Inhalt wird zusammengeführt, mit Konfliktlösung. Zuvor gab es einen Konflikt zwischen einem ** 'a.txt' ** (umbenannt als' b.txt') und einem neuen ** 'b.txt' **: Beide Dateien können nicht im selben Zweig existieren, eine Auswahl (von Datei, nicht von Dateiinhalt) musste gemacht werden. – VonC
In Schritt 4 meiner Frage, wenn ich "git rm" und "git add" in einem einzigen Commit mache, funktioniert es wie ich es erwarte! Ich verstehe das jetzt nicht. Wie kann ich vorhersagen, wann die Datei beide Inhalte enthält? Wann wird es nur den Inhalt von XBranch haben und wann wird es nur den Inhalt von Master haben? – Sabya