tôi có một sự nhầm lẫn về một hành vi git cụ thể:git đổi tên/xóa nhầm lẫn
Sau đây là các bước và tình hình (danh sách các lệnh cũng được nêu phía sau):
- Tôi có hai chi nhánh: chủ và XBranch
- Có một tệp src/a.txt trong cả hai tệp. Nội dung của nó là "Nội dung cũ"
- Trong XBranch tôi đổi tên src/a.txt thành src/b.txt, sử dụng:
mv
,git rm
,git add
. Trong tên chính, hãy đổi tên tệp a.txt. Trong cam kết tôi đã làm
git rm src/a.txt
nhưng quên làmgit add src/b.txt
Trong tổng thể tôi làm:git rm src/a.txt
vàgit commit
Trong tổng thể, tôi chỉnh sửa nội dung của tập tin b.txt để "
New Content
- Trong tổng thể tôi làm
git add src/b.txt
vàgit commit
- Trong tổng thể tôi làm:
git merge XBranch
Các tập tin xung đột src/b.txt, đó là một cách hoàn hảo un có thể hiểu được. Nhưng nội dung là "Old Content
". Tại sao?
Tại sao không là nó cái gì đó như:
<<<<<<< HEAD
New Content
=======
Old content
>>>>>>> XBranch
Danh sách Commands:
[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
Nhưng sau đó như thế nào một cách logic là nó khác với các tình huống sau đây : 1. Tôi thêm tệp a.txt vào chủ với "Nội dung cũ" và cam kết. 2. Tôi thêm một tập tin a.txt trong XBranch với "Nội dung mới" và cam kết nó. 3. Tôi kết hợp XBranch thành master. Lần này, nó hiển thị cả hai nội dung trong tệp đó! – Sabya
@Sabya: lần này, cả hai cây (thư mục 'case2' trong nhánh' master' và 'XBranch') tham chiếu tệp * new *' a.txt': nội dung của nó được hợp nhất, với độ phân giải xung đột. Trước đây, có một xung đột giữa ** 'a.txt' ** (được đổi tên thành' b.txt') và một tệp mới ** 'b.txt' **: cả hai tệp không thể tồn tại trong cùng một nhánh, một lựa chọn (của tệp, không phải nội dung tệp) phải được thực hiện. – VonC
Trong bước 4 của câu hỏi của tôi, nếu tôi làm "git rm" và "git add" trong một cam kết, nó hoạt động như tôi mong đợi! Tôi không hiểu bây giờ. Làm thế nào tôi có thể dự đoán khi nào tệp sẽ có cả hai nội dung? Khi nó sẽ chỉ có nội dung của XBranch và khi nào nó sẽ chỉ có nội dung của chủ? – Sabya