Điều hiện đang xảy ra là, bạn có một tập hợp các tệp nhất định mà bạn đã thử hợp nhất trước đó, nhưng chúng đã tạo ra xung đột hợp nhất. Lý tưởng nhất, nếu một người có xung đột hợp nhất, anh ta nên giải quyết chúng bằng tay và cam kết thay đổi bằng cách sử dụng git add file.name && git commit -m "removed merge conflicts"
. Bây giờ, một người dùng khác đã cập nhật các tệp được đề cập trên kho lưu trữ của anh ấy và đã đẩy các thay đổi của anh ấy lên repo ngược dòng chung.
Điều đó xảy ra, rằng xung đột hợp nhất của bạn từ (có thể) cam kết cuối cùng không được giải quyết, do đó các tệp của bạn không được hợp nhất hoàn toàn, và do đó cờ U
( unmerged
) cho các tệp. Vì vậy, bây giờ, khi bạn thực hiện một git pull
, git đang đưa ra lỗi, bởi vì bạn có một số phiên bản của tệp, không được giải quyết chính xác.
Để giải quyết vấn đề này, bạn sẽ phải giải quyết các xung đột hợp nhất trong câu hỏi và thêm và cam kết các thay đổi, trước khi bạn có thể thực hiện git pull
.
Tái tạo mẫu và giải quyết vấn đề:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Đầu tiên, chúng ta hãy tạo cấu trúc kho lưu trữ
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Bây giờ chúng tôi đang ở repo_clone và nếu bạn làm điều git pull
đó, nó sẽ xuất hiện xung đột
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Nếu chúng ta bỏ qua các xung đột trong bản sao và thực hiện thêm các cam kết trong repo ban đầu bây giờ,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Và sau đó chúng tôi làm một git pull
, chúng tôi nhận được
repo_clone $ git pull
U file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Lưu ý rằng file
bây giờ đang ở trạng thái không trộn lẫn và nếu chúng ta làm một git status
, chúng ta có thể thấy rõ điều tương tự:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Vì vậy, để giải quyết vấn đề này, trước tiên chúng tôi cần giải quyết xung đột hợp nhất mà chúng tôi đã bỏ qua trước đó
repo_clone $ vi file
và đặt nội dung của nó thành
text2
text1
text1
và sau đó thêm nó và cam kết thay đổi
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts