Điều đầu tiên tôi muốn làm rõ là tên chi nhánh chỉ là bí danh cho một cam kết cụ thể. một cam kết là những gì git hoạt động, khi bạn kéo, đẩy hợp nhất và vv. Mỗi cam kết có một id duy nhất.
Khi bạn thực hiện hợp nhất $ git, điều thực sự xảy ra là git cố gắng chuyển nhanh chi nhánh hiện tại của bạn đến cam kết của nhánh được tham chiếu (nói cách khác là cả hai tên nhánh đều trỏ đến cùng một cam kết.) Kịch bản này là dễ nhất đối với git để đối phó, vì không có cam kết mới. Hãy nghĩ về chủ nhân nhảy lên lilipad chi nhánh của bạn đang ớn lạnh. Có thể đặt cờ --no-ff, trong trường hợp đó git sẽ tạo một cam kết mới bất kể có xung đột mã nào hay không.
Trong tình huống có xung đột mã giữa hai nhánh mà bạn đang cố gắng hợp nhất (thường là hai nhánh có lịch sử cam kết chia sẻ một cam kết chung trong quá khứ), chuyển tiếp nhanh sẽ không hoạt động. git vẫn có thể tự động hợp nhất các tệp, miễn là cùng một dòng không bị thay đổi bởi cả hai nhánh trong một tệp xung đột. trong trường hợp này, git sẽ hợp nhất các tệp xung đột cho bạn VÀ tự động cam kết chúng. Bạn có thể xem trước cách git đã làm bằng cách thực hiện $ git diff --cached. Hoặc bạn có thể chuyển cờ --no-commit cho lệnh hợp nhất, sẽ để lại các tệp đã sửa đổi trong chỉ mục của bạn, bạn sẽ cần thêm và cam kết. Nhưng bạn có thể $ git diff các tệp này để xem lại những gì hợp nhất sẽ thay đổi.
Kịch bản thứ ba là khi có xung đột, git không thể tự động giải quyết. Trong trường hợp này, bạn sẽ cần phải hợp nhất chúng theo cách thủ công. Theo tôi đây là cách dễ nhất để thực hiện hợp nhất, như araxis merge hoặc p4merge (miễn phí). Dù bằng cách nào, bạn phải làm từng tệp một. Nếu việc hợp nhất dường như bị kẹt, hãy sử dụng $ git merge - liên tục, để đưa nó đi cùng. Git sẽ cho bạn biết nếu nó không thể tiếp tục, và nếu vậy tại sao không. Nếu bạn cảm thấy mình đã hợp nhất vào một lúc nào đó, bạn có thể thực hiện hợp nhất $ git --abort, và mọi sự hợp nhất sẽ hoàn tác và bạn có thể bắt đầu lại. Khi bạn hoàn tất, mỗi tệp bạn đã hợp nhất sẽ là một tệp sửa đổi cần được thêm và cam kết. Bạn có thể xác minh vị trí của các tệp với trạng thái $ git. Nếu bạn chưa cam kết các tập tin hợp nhất chưa. Bạn cần phải làm điều đó để hoàn thành việc hợp nhất.
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, kết quả làfatal: cannot do a partial commit during a merge.
. Và tất nhiên, "Cam kết một phần" dường như không được ghi lại hoặc thảo luận ở bất cứ đâu trong các trang git man. Thực hiệngit merge
sau khi sửa kết quả trongPlease, commit your changes before you can merge.
Công cụ ass bị hỏng ...