2012-08-28 30 views
14

Tôi có 2 chi nhánh, masternewfeature. Khi tôi muốn kết hợp newfeature vào master, tôi đã sử dụng:Kết hợp xung đột trong .gitignore

git checkout master 
git merge newfeature 

tôi nhận được lỗi:

Auto-merging .gitignore 
CONFLICT (content): Merge conflict in .gitignore 
Automatic merge failed; fix conflicts and then commit the result. 

tôi mở ra .gitignore và nó trông giống như một mớ hỗn độn bây giờ với phần cuối của tập tin tìm kiếm như

<<<<<<< HEAD 
public/img/ignore 
======= 
public/img/profiles 
public/blog 
public/recommendation 
>>>>>>> newfeature 

gì đã xảy ra, và làm thế nào nên này được cố định vì vậy mà tôi có thể hợp nhất các chi nhánh vào master?

Trả lời

16

Bạn đã chỉnh sửa .gitignore trong cả hai nhánh. Bây giờ, git không chắc chắn những dòng nào trong mỗi bản sao là những dòng chính xác để nó yêu cầu bạn giải quyết chúng.

Các dòng:

<<<<<<< HEAD 
public/img/ignore 
======= 

Are những gì xuất hiện trong các bản sao của tập tin trong tổng thể.

======= 
public/img/profiles 
public/blog 
public/recommendation 
>>>>>>> newfeature 

tại các chi nhánh newfeature

Bạn chỉ cần phải chỉnh sửa các tập tin như bạn muốn nó xuất hiện cuối cùng. Sau đó...

git add .gitignore 
git commit 
1

Sử dụng git mergetool để giải quyết xung đột (hoặc tự sửa chữa nó theo cách thủ công; đây không phải là trường hợp đặc biệt khó giải quyết), sau đó cam kết lại.

1

Fix những mâu thuẫn trong file .gitignore, thêm phiên bản cập nhật và sau đó cam kết:

vim .gitignore 
# assuming you want all 4 lines: simply remove the conflict markers (<<<<<<, ======, and >>>>>) 
git add .gitignore 
git commit 
6

Chỉ cần chỉnh sửa .gitignore tệp để giải quyết mâu thuẫn:

Trước

<<<<<<< HEAD 
public/img/ignore 
======= 
public/img/profiles 
public/blog 
public/recommendation 
>>>>>>> newfeature 

Sau

public/img/ignore 
public/img/profiles 
public/blog 
public/recommendation 

Sau đó:

git add .gitignore

git commit

Thông báo cam kết được tạo tự động sẽ xuất hiện, chấp nhận nó (lưu & đóng) và hoàn tất.

2

Điều xảy ra là có xung đột hợp nhất: hai chi nhánh đã thay đổi tệp "cùng một lúc", trong các luồng riêng biệt. Bạn có thể thấy các thay đổi mà chi nhánh khác đã thực hiện trong phần "newfeature" và phần còn lại trong phần HEAD.

Những gì bạn cần làm là chỉnh sửa tệp đó để chứa nội dung bạn muốn, thêm nội dung cần theo dõi và sau đó cam kết điều đó. Điều này được gọi là cam kết hợp nhất.

Bây giờ, những gì tôi đã nói ở trên là thực hiện hợp nhất bằng tay, "thủ công". Nó có thể là dễ hiểu nhất. Bạn cũng có thể sử dụng lệnh git mergetool để thực hiện điều đó bằng công cụ trực quan, nếu được định cấu hình hoặc sử dụng "git merge" với một số chiến lược sẽ cho biết cách xử lý xung đột.

1

Hợp nhất tự động của Git không thành công. Điều này thường xảy ra khi các thay đổi xảy ra cho cùng một tệp tại cùng một thời điểm trong các nhánh/kho khác nhau khi cố gắng hợp nhất các nhánh/nội dung đẩy.

Các sửa đổi được thực hiện đối với .gitignore trên chi nhánh mới có liên kết với văn bản được tạo trên trang cái. Dòng: <<<<<<< HEAD cho biết các sửa đổi được thực hiện trên chính, theo sau dòng này, trong khi dòng >>>>>>> newfeature cho biết các sửa đổi được thực hiện trên tính năng mới, trước dòng này. Hai sửa đổi được phân tách bằng =======.

Bạn nên chỉnh sửa tệp theo cách thủ công và giữ/hợp nhất những gì hữu ích trong từng phần. Sau đó, bạn nên cam kết (sau khi xóa các dòng <<<<HEAD, =====>>>newfeature).

Các vấn đề liên quan