0

Cách ly các tính năng thành các nhánh khác nhau là một thực tiễn quan trọng đối với bất kỳ nhà phát triển nghiêm túc nào. Bằng cách tách riêng từng tính năng, sửa lỗi hoặc thử nghiệm làm việc, bạn sẽ tránh được rất nhiều vấn đề và giữ cho các nhánh phát triển của bạn sạch sẽ.

Tại một số điểm, một đoạn mã sẽ đạt đến trạng thái mà bạn sẽ muốn tích hợp nó với phần còn lại của dự án. Đây là nơi lệnh git merge xuất hiện.

Chuẩn bị hợp nhất

Giả sử rằng chúng tôi muốn hợp nhất  hotfix nhánh vào nhánh chính của bạn .

Trước khi chúng tôi bắt đầu, làm thế nào để bạn chắc chắn rằng bạn đã sẵn sàng để hợp nhất các thay đổi của mình?

  1. Kiểm tra xem kho lưu trữ cục bộ của bạn có được cập nhật với những thay đổi mới nhất từ ​​máy chủ từ xa của bạn với a không git fetch.
  2. Khi quá trình tìm nạp hoàn tất, hãy sử dụng  git checkout master lệnh.
  3. Đảm bảo nhánh chính có các bản cập nhật mới nhất bằng cách thực thi git pull.
  4. Thanh toán cho chi nhánh sẽ nhận được các thay đổi, trong trường hợp của chúng tôi là chủ.

Sáp nhập

Sau khi chuẩn bị hoàn tất, bạn có thể bắt đầu hợp nhất với  git merge hotfixlệnh.

Hợp nhất chuyển tiếp nhanh

Một merge nhanh về phía trước có thể xảy ra khi có một con đường tuyến tính giữa các chi nhánh mà chúng ta muốn kết hợp. Nếu một bản gốc chưa được chuyển hướng , thay vì tạo một cam kết mới, nó sẽ chỉ trỏ chính đến bản cam kết mới nhất của nhánh hotfix. Tất cả các cam kết từ nhánh hotfix hiện có sẵn trong nhánh chính.

Tuy nhiên, không thể hợp nhất chuyển tiếp nhanh nếu các nhánh đã chuyển hướng. Trong trường hợp này, bạn muốn sử dụng hợp nhất ba chiều .

Hợp nhất ba chiều

Khi không có đường dẫn tuyến tính đến nhánh đích, Git không có lựa chọn nào khác ngoài việc kết hợp chúng thông qua hợp nhất ba chiều . Sự hợp nhất này sử dụng một cam kết bổ sung để liên kết hai chi nhánh lại với nhau.

Kiểm tra này ra! Tạo dự án của riêng bạn với nhánh thử nghiệm RSpec , đồng thời chỉnh sửa các kiểm tra Bộ điều khiển trong tổng thể. Bây giờ, hãy cố gắng hợp nhất.

Làm thế nào để đối phó với xung đột hợp nhất

Một cuộc xung đột nhập xảy ra khi hai chi nhánh bạn đang cố gắng để kết hợp cả hai đã thay đổi cùng một phần của cùng một tập tin. Khi điều này xảy ra, Git sẽ không thể tìm ra phiên bản nào sẽ sử dụng.

Ví dụ: nếu tệp example.rbđược chỉnh sửa trên cùng một dòng trong các nhánh khác nhau của cùng một kho lưu trữ Git hoặc nếu tệp bị xóa, bạn sẽ gặp lỗi xung đột hợp nhất khi bạn cố gắng hợp nhất các nhánh này. Trước khi bạn có thể tiếp tục, xung đột hợp nhất phải được giải quyết bằng một cam kết mới .

Hợp nhất xung đột sẽ chỉ xảy ra trong trường hợp hợp nhất 3 chiều.

  1. Tạo danh sách  các tệp cần được giải quyết: git status
  2. # On branch master
    # You have unmerged paths.
    #   (fix conflicts and run "git commit")
    # Unmerged paths:
    #   (use "git add ..." to mark resolution)
    # both modified: example.rb
    # no changes added to commit (use "git add" and/or "git commit -a")
  3. Khi   gặp phải dòng xung đột , Git sẽ chỉnh sửa nội dung của các tệp bị ảnh hưởng bằng  các chỉ báo trực quan  đánh dấu cả hai mặt của nội dung xung đột. Những dấu hiệu trực quan là:
    • <<<<<<<- Dấu mâu thuẫn , xung đột bắt đầu sau dòng này.
    • =======- Chia các thay đổi của bạn từ các thay đổi trong nhánh khác.
    • >>>>>>> - Kết thúc các dòng xung đột.
    <<<<<<< HEAD(master)
    conflicted text from HEAD(master)
    =======
    conflicted text from hotfix
    >>>>>>> hotfix
  4. Quyết định xem bạn muốn chỉ giữ các thay đổi hotfix hoặc chính của bạn hoặc viết mã hoàn toàn mới . Xóa các dấu xung đột trước khi hợp nhất các thay đổi của bạn.
  5. Khi bạn sẵn sàng hợp nhất, tất cả những gì bạn phải làm là chạy  git addlệnh trên các tệp bị xung đột để thông báo cho Git rằng chúng đã được giải quyết.
  6. Cam kết thay đổi của bạn với git commitđể tạo ra cam kết hợp nhất.

Hy vọng điều này đã giúp bạn hiểu rõ hơn về cách hợp nhất các chi nhánh của bạn và giải quyết các xung đột.

|