2012-06-15 27 views
8

Tôi đã hợp nhất hai chi nhánh. Có rất nhiều xung đột. Giải quyết tất cả. Bây giờ tôi không chắc chắn, có thể tôi đã mắc lỗi trong khi giải quyết xung đột. Và tôi không thấy không có cách nào khác để kiểm tra là nó đúng - chỉ cần chạy hợp nhất một lần nữa, và kiểm tra xung đột từng cái một.git nhận được xung đột từ quá trình hợp nhất trước đây mà không cần hợp nhất lại một lần nữa

Điều này có nghĩa là tôi cần phải tạo thêm một chi nhánh nữa để lưu trữ kết quả hợp nhất của tôi, phải không?

Tôi có thể tránh không? Có thể có tất cả các tệp xung đột với tất cả các số <<<<<<, ======, >>>>>> từ đâu đó trong git, mà không chạy hợp nhất lại một lần nữa?

+0

Có thể bạn nên chấp nhận một trong các câu trả lời. – dotancohen

+0

Tôi không nghĩ câu trả lời thực sự trả lời câu hỏi. Các lần hợp nhất tiếp theo sẽ không hiển thị cùng các xung đột từ các lần hợp nhất trước đó. – e40

Trả lời

3

Nếu bạn muốn nhìn vào những gì hợp nhất cậu có thể làm

git show <hash-of-merge-commit> 

Nếu bạn muốn thực hiện lại toàn bộ hợp nhất bạn làm

git checkout <branch-that-you-merged-to> 
git reset --hard <hash-of-the-commit-just-before-the-merge> 
git merge <branch-that-you-merged-in> 

Nếu bạn muốn thực hiện lại việc hợp nhất và sau đó so sánh hợp nhất thứ hai với lần hợp nhất đầu tiên (để xem xét việc hợp nhất đầu tiên) có thể làm:

git checkout <branch-that-you-merged-to> 
git rev-parse HEAD 

Điều này cung cấp bạn là băm của cam kết hiện tại. Lưu ý nó xuống. Sau đó làm

git reset --hard <hash-of-the-commit-just-before-the-merge> 
git merge <branch-that-you-merged-in> 

Hoàn thành việc hợp nhất, sau đó làm điều này để so sánh thao tác trộn

git difftool <hash-of-commit-noted-above> 

Nếu bạn cảm thấy rằng việc hợp nhất ban đầu là tốt hơn, bạn có thể làm

git reset --hard <hash-of-commit-noted-above> 
+0

Trong quá trình hợp nhất, bạn có thể chơi xung quanh với "git show: 1: file.txt" để đến cơ sở hợp nhất, ": 2: file.txt" để hiển thị tệp mục tiêu hợp nhất, ": 3: file.txt "để hiển thị tệp hợp nhất –

2

Vâng, nó là tầm thường. Trước hết, bạn cần tìm id sha1 của cam kết hợp nhất bằng cách sử dụng git log. Khi bạn làm việc tiếp theo:

git checkout <sha1>^1 
git merge <sha1>^2 

bạn sẽ ở trạng thái không đầu. ^n có nghĩa là phụ huynh thứ n của một cam kết. Vì vậy, không có chi nhánh nào được tạo ra. Bạn có thể giải quyết xung đột một lần nữa cẩn thận hơn và sau đó

git diff HEAD..<sha1> 

để xem có bất kỳ sự khác biệt nào trong các giải pháp xung đột hay không.

BTW, chi nhánh trong git chỉ là một tên thân thiện với con người cho một sha1 của một cam kết, do đó, không sợ để tạo ra chúng nhiều như bạn muốn.

PS: Nếu bạn làm việc trong Windows, biểu tượng ^ trong dòng lệnh là đặc biệt, bạn cần phải gấp đôi hoặc trích dẫn đối số dòng lệnh.

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