2010-04-06 36 views
6

Tôi có một tệp với một dòng trong đó. Tôi tạo một chi nhánh và thêm dòng thứ hai vào cùng một tệp. Lưu và cam kết với chi nhánh. Tôi chuyển về chế độ chính. Và thêm một dòng thứ hai khác vào tệp. Lưu và cam kết với tổng thể. Vì vậy, hiện tại có tổng cộng 3 dòng duy nhất.Tại sao Git không thể hợp nhất các thay đổi tệp với cha/mẹ đã sửa đổi?

Nếu bây giờ tôi thử và hợp nhất nhánh đó với chủ, nó sẽ bị xung đột hợp nhất.

Tại sao Git không thể kết hợp từng dòng một, cái khác?

nỗ lực của tôi tại merge cư xử một cái gì đó như thế này:

PS D:\dev\testing\test1> git merge newbranch 
Auto-merging hello.txt 
CONFLICT (content): Merge conflict in hello.txt 
Automatic merge failed; fix conflicts and then commit the result. 
PS D:\dev\testing\test1> git diff 
diff --cc hello.txt 
index 726eeaf,e48d31a..0000000 
--- a/hello.txt 
+++ b/hello.txt 
@@@ -1,2 -1,2 +1,6 @@@ 
    This is the first line. 
- New line added by master. 
-Added a line in newbranch. 
++<<<<<<< HEAD 
++New line added by master. 
++======= 
++Added a line in newbranch. 
++>>>>>>> newbranch 

Có cách nào để làm cho nó dòng khe trong tự động, một sau khi khác?

+2

Dường như không có cách đơn giản để xác định thứ tự mà chúng sẽ được bỏ qua - sau khi tất cả, thứ tự chắc chắn có thể quan trọng khi nói đến mã thực thi. – Amber

Trả lời

12

Hãy nói rằng các chi nhánh tập tin Một trông giống như:

First line 
Branch A's second line 

Và chi nhánh B trông giống như:

First line 
Branch B's second line 

Khi bạn hợp nhất, có hai cách khác nhau để giải quyết nó. Dưới đây là một cách:

First line 
Branch A's second line 
Branch B's second line 

Dưới đây là một cách khác:

First line 
Branch B's second line 
Branch A's second line 

Git không có ý tưởng mà một trong những hai lựa chọn bạn thích, hoặc nếu một trong hai thậm chí còn hòa trộn chấp nhận được.

1

Tôi có thể cho bạn biết lý do tại sao nó không thể hợp nhất hai - theo git, dòng 2 của FileA là "như vậy và như vậy" trong khi dòng 2 của FileB là "cái gì khác". Theo git do đó, nó đang cố gắng để tạo tập tin từ FileA và FileB với một dòng có hai giá trị có thể. Nó không thể quyết định cái nào bạn muốn, vì vậy nó đổ cả hai và giúp bạn sửa nó.

2

giả sử bạn có dòng này:

printf(something); 

trong branchA, bạn thực hiện nó:

while(x < 5) 
printf(something); 

trong branchB, bạn thực hiện nó:

if(y>10) 
printf(something); 

Làm thế nào bạn có thể hợp nhất này, hay đúng hơn, bạn sẽ tin tưởng vào kết quả hợp nhất mà một công cụ tạo ra cho điều này?

4

Có một chiến lược hợp nhất git được gọi là union có thể được định cấu hình từ tệp cấu hình .gitattributes sẽ làm điều này cho bạn, nhưng bạn sẽ không thể kiểm soát thứ tự các đường xung đột sẽ kết thúc trong tệp được hợp nhất và không có điểm đánh dấu xung đột để chỉ ra nơi xảy ra sự cố này.

Bạn cũng có thể xác định chiến lược hợp nhất tùy chỉnh có thể sử dụng một số kiến ​​thức chuyên ngành về cấu trúc của tệp để xác định thứ tự chính xác.

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