Làm cách nào để hợp nhất chi nhánh từ xa với chi nhánh địa phương?

Giả sử bạn đã tạo một công việc để thực hiện một nhiệm vụ cụ thể và muốn tích hợp kết quả công việc của mình vào cơ sở mã chính sau khi bạn đã hoàn thành và kiểm tra tính năng của mình

Hợp nhất nhánh của bạn thành nhánh chính là cách phổ biến nhất để thực hiện việc này.

Điều rất phổ biến là trong khi bạn đang làm việc trong nhánh tính năng của mình, đồng đội của bạn tiếp tục cam kết hoàn thành công việc của họ

Khi bạn chạy merge, các thay đổi từ nhánh tính năng của bạn được tích hợp vào HEAD của nhánh mục tiêu

Git tạo một cam kết mới [M] được gọi là cam kết hợp nhất, kết quả từ việc kết hợp các thay đổi từ nhánh tính năng của bạn và chính từ điểm mà hai nhánh phân kỳ

hợp nhất các chi nhánh

  1. Trong cửa sổ bật lên Nhánh [menu chính Git. Nhánh ] hoặc trong ngăn Nhánh của Git tool window, select the target branch that you want to integrate the changes to, and choose Checkout from the context menu to switch to that branch.

  2. làm một điều trong số sau đây

    • Nếu bạn không cần chỉ định các tùy chọn để hợp nhất, hãy chọn nhánh mà bạn muốn hợp nhất vào nhánh hiện tại và chọn Hợp nhất vào hiện tại from the submenu.

    • Nếu bạn cần chỉ định các tùy chọn hợp nhất, từ menu chính, hãy chọn VCS Git. Hợp nhất các thay đổi để mở hộp thoại Hợp nhất .

      Chọn nhánh mà bạn muốn hợp nhất vào nhánh hiện tại, nhấp vào Sửa đổi tùy chọn và chọn từ các tùy chọn sau.

      • --no-ff. một cam kết hợp nhất sẽ được tạo trong mọi trường hợp, ngay cả khi việc hợp nhất có thể được giải quyết dưới dạng chuyển tiếp nhanh

      • --ff-only. hợp nhất sẽ chỉ được giải quyết nếu có thể chuyển tiếp nhanh

      • --squash. một cam kết duy nhất với tất cả các thay đổi được kéo sẽ được tạo trên nhánh hiện tại

      • -m. bạn sẽ có thể chỉnh sửa tin nhắn cho cam kết hợp nhất

      • --no-commit. hợp nhất sẽ được thực hiện, nhưng cam kết hợp nhất sẽ không được tạo để bạn có thể kiểm tra kết quả hợp nhất trước khi thực hiện

    Nhấp vào Hợp nhất .

Nếu cây làm việc của bạn sạch [có nghĩa là bạn không có thay đổi nào chưa được cam kết] và không có xung đột nào xảy ra giữa nhánh đối tượng của bạn và nhánh mục tiêu, Git sẽ hợp nhất hai nhánh và cam kết hợp nhất sẽ xuất hiện trong < . Log tab of the Git tool window Alt+9:

Nếu xung đột xảy ra giữa nhánh của bạn và nhánh mục tiêu, bạn sẽ được nhắc giải quyết xung đột [xem Giải quyết xung đột]. Nếu vẫn còn xung đột chưa được giải quyết sau khi hợp nhất, nút Xung đột hợp nhất sẽ xuất hiện trong danh sách thay đổi tương ứng trong Cục bộ . view with a link to resolve them.

Nếu bạn có các thay đổi cục bộ sẽ bị ghi đè khi hợp nhất, IntelliJ IDEA sẽ đề xuất thực hiện Hợp nhất thông minh . Nếu bạn chọn tùy chọn này, IntelliJ IDEA sẽ thực hiện các thay đổi không được cam kết, thực hiện hợp nhất và sau đó bỏ lưu các thay đổi.

Bạn có thể hủy thao tác hợp nhất chưa hoàn thành bằng cách chọn Hủy action from the Git Branches popup.

Rebase nhánh [git-rebase]

Khi bạn chuyển đổi 6 nhánh sang nhánh khác, bạn áp dụng các xác nhận từ nhánh đầu tiên lên trên cam kết HEAD trong nhánh thứ hai

Giả sử bạn đã tạo một nhánh tính năng để thực hiện một tác vụ cụ thể và thực hiện một số cam kết với nhánh đó

Trong khi bạn phát triển trong chi nhánh của mình, đồng đội của bạn tiếp tục cam kết hoàn thành công việc của họ

Khi bạn thực hiện thao tác rebase, bạn tích hợp các thay đổi mà bạn đã thực hiện trong nhánh tính năng của mình sang nhánh master bằng cách áp dụng các cam kết của bạn lên trên cam kết HEAD hiện tại trong master

Rebase một nhánh trên đầu trang của một nhánh khác

  1. Từ menu chính chọn Git. Nổi loạn .

  2. Từ danh sách, chọn nhánh mục tiêu mà bạn muốn khởi động lại nhánh hiện tại

  3. Nếu bạn cần khởi động lại nhánh nguồn bắt đầu từ một cam kết cụ thể thay vì khởi động lại toàn bộ nhánh, hãy nhấp vào Sửa đổi tùy chọn và chọn --onto. In the source branch field, enter the hash of the commit starting from which you want to apply the current branch to the new base:

    Để sao chép một hàm băm cam kết, hãy chọn nó trong Nhật ký , nhấp chuột phải vào nó và chọn . .

  4. Nếu nhánh bạn muốn rebase hiện chưa được kiểm tra, hãy nhấp vào Sửa đổi tùy chọn , nhấp vào . , and choose a branch from the list that appears:

    IntelliJ IDEA sẽ kiểm tra nhánh này trước khi bắt đầu hoạt động rebase

  5. Nếu bạn muốn khởi động lại tất cả các cam kết có thể truy cập được trong nhánh, hãy nhấp vào Sửa đổi tùy chọn và chọn - . [for more information on this option, see git-rebase].

  6. Nếu bạn cần giữ lại các lần xác nhận trống, tức là các lần xác nhận không thay đổi bất kỳ điều gì từ gốc của chúng, hãy nhấp vào Sửa đổi tùy chọn và chọn --keep-empty [for more information on this option, see git-rebase].

  7. Nếu bạn muốn duy trì các cam kết hợp nhất trong quá trình khởi động lại để giữ chúng trong lịch sử nhánh, hãy nhấp vào Sửa đổi tùy chọn và chọn < . --preserve-merges [this option is unavailable for --no-ff0 rebase].

  8. Nhấp vào Rebase .

Bạn có thể hủy bỏ thao tác rebase chưa hoàn thành hoặc tiếp tục một rebase bị gián đoạn bằng cách chọn Hủy bỏ or Continue actions respectively from the top of the Git Branches popup.

Nếu bạn không cần chỉ định các tùy chọn cho quá trình rebase, bạn có thể bắt đầu quá trình rebase mà không cần gọi hộp thoại rebase. Trong cửa sổ bật lên Nhánh hoặc trong cửa sổ công cụ Git, hãy chọn một nhánh và chọn một trong các tác vụ sau.

  • Kéo vào hiện tại bằng cách sử dụng Rebase [đối với các nhánh từ xa] để thay đổi từ nhánh đã chọn và khởi động lại nhánh hiện tại trên các thay đổi này.

  • Checkout và Rebase on Current [cho cả nhánh từ xa và cục bộ] để kiểm tra nhánh đã chọn và đặt lại cơ sở trên nhánh hiện đang được kiểm xuất. Nếu nhánh từ xa không tồn tại cục bộ, IntelliJ IDEA sẽ âm thầm tạo một nhánh cục bộ được theo dõi, kiểm tra nhánh đó và khởi động lại.

  • Rebase hiện tại vào Selected [cho cả nhánh từ xa và nhánh cục bộ] để rebase nhánh hiện được kiểm xuất trên đầu nhánh đã chọn.

Để biết chi tiết về cách bỏ qua hoặc xóa cam kết trong quá trình rebase, hãy tham khảo

Xem video này để biết cách hoạt động hợp nhất hoặc rebase được phản ánh trong tab Nhật ký của Git tool window Alt+9:

Cherry-pick cam kết riêng biệt

Đôi khi bạn chỉ cần áp dụng một cam kết duy nhất cho một nhánh khác thay vì khởi động lại hoặc hợp nhất toàn bộ nhánh. Điều này có thể hữu ích, ví dụ: nếu bạn đang làm việc trong một nhánh tính năng và muốn tích hợp một hotfix từ master đã được cam kết sau khi hai nhánh đã . Hoặc bạn có thể muốn nhập bản sửa lỗi vào nhánh phát hành trước đó. Bạn có thể làm như vậy bằng cách sử dụng hành động Hái quả anh đào .

Trạng thái của thao tác hái quả anh đào được hiển thị trên thanh trạng thái. Bạn luôn có thể hủy bỏ thao tác chọn anh đào đang diễn ra bằng cách chọn Hủy chọn anh đào trong Nhánh Git popup.

Áp dụng một cam kết cho một chi nhánh khác

  1. Trong cửa sổ bật lên Nhánh [menu chính Git. Nhánh ], hãy chọn nhánh mục tiêu mà bạn muốn tích hợp các thay đổi và chọn Thanh toán từ menu bật lên để .

  2. Mở cửa sổ công cụ Git Alt+9 và chuyển sang Nhật ký tab.

  3. Xác định vị trí cam kết chứa các thay đổi bạn muốn chọn

    Bạn có thể lọc các lần xác nhận theo nhánh, người dùng hoặc ngày. Bạn cũng có thể nhấp vào trên thanh công cụ và chọn Đánh dấu. Tùy chọn Cam kết không được chọn để tô xám các cam kết đã được áp dụng cho nhánh hiện tại. Nếu bạn biết hàm băm của cam kết hoặc đang tìm kiếm một cam kết được gắn thẻ, bạn cũng có thể sử dụng hành động Chuyển đến Hash / Branch / Tag [nhấn Ctrl+ . Log tab of the Git tool window Alt+9, or click on the toolbar].

  4. Chọn cam kết cần thiết. Sử dụng thông tin trong khu vực Chi tiết cam kết để đảm bảo đây là những thay đổi mà bạn muốn chuyển sang chi nhánh khác.

  5. Nhấp vào Hái quả anh đào trên thanh công cụ. IntelliJ IDEA sẽ áp dụng và thực hiện các thay đổi đối với nhánh mục tiêu.

  6. Nếu lựa chọn sơ khai không thành công do xung đột, các thay đổi đã chọn sẽ xuất hiện trong khu vực Thay đổi mà bạn có thể thấy trong Local Changes view. You can review these changes and commit them later if necessary.

    Nếu bạn muốn IntelliJ IDEA tự động tạo danh sách thay đổi trong trường hợp cherry-pick không thành công, hãy bật cài đặt tương ứng trong Cài đặt/Tùy chọn. Kiểm soát phiên bản. Danh sách thay đổi .

  7. Đẩy các thay đổi vào nhánh mục tiêu

Áp dụng các thay đổi riêng biệt

Hãy tưởng tượng bạn đã thực hiện một số thay đổi đối với một tệp mà bạn muốn áp dụng cho một nhánh khác, nhưng những thay đổi này đã được cam kết cùng với các tệp đã sửa đổi khác. IntelliJ IDEA cho phép bạn áp dụng các thay đổi riêng biệt thay vì chọn toàn bộ cam kết

  1. Trong cửa sổ bật lên Nhánh [menu chính Git. Nhánh ], hãy chọn nhánh mục tiêu mà bạn muốn tích hợp các thay đổi và chọn Thanh toán từ menu bật lên để .

  2. Mở cửa sổ công cụ Git Alt+9 và chuyển sang Nhật ký tab.

  3. Định vị cam kết chứa các thay đổi mà bạn muốn áp dụng

    Bạn có thể lọc các lần xác nhận theo nhánh, người dùng hoặc ngày. Bạn cũng có thể nhấp vào trên thanh công cụ và chọn Đánh dấu. Tùy chọn Cam kết không được chọn để tô xám các cam kết đã được áp dụng cho nhánh hiện tại. Nếu bạn biết hàm băm của cam kết hoặc đang tìm kiếm một cam kết được gắn thẻ, bạn cũng có thể sử dụng hành động Chuyển đến Hash / Branch / Tag [nhấn Ctrl+ . Log tab of the Git tool window Alt+9, or click on the toolbar].

  4. Trong ngăn Chi tiết cam kết ở bên phải, hãy chọn các tệp chứa các thay đổi mà bạn muốn áp dụng cho nhánh mục tiêu và chọn Cherry-Pick Selected Changes from the context menu.

  5. Trong hộp thoại mở ra, hãy chọn danh sách thay đổi hiện có hoặc nhập tên cho danh sách thay đổi mới và nhấp vào OK .

  6. Cam kết các thay đổi và sau đó đẩy chúng đến nhánh mục tiêu

Áp dụng các tệp riêng biệt

Ngoài việc áp dụng các thay đổi riêng biệt cho một tệp, bạn có thể sao chép toàn bộ nội dung của tệp sang một nhánh khác. Điều này có thể hữu ích, ví dụ: nếu tệp bạn muốn áp dụng không tồn tại trong nhánh mục tiêu hoặc nếu các thay đổi đối với nó được thực hiện trong một số lần xác nhận

  1. đến chi nhánh mà các thay đổi sẽ được áp dụng

  2. Trong cửa sổ bật lên Nhánh [menu chính Git. Nhánh ] hoặc trong ngăn Nhánh của Git tool window, select the branch that contains the file you want to apply and choose Show Diff with Working Tree from the context menu.

    Cửa sổ công cụ Thay đổi mở ra hiển thị danh sách tất cả các tệp khác nhau trong nhánh đã chọn so với nhánh hiện đang được kiểm tra .

    • Các tệp tồn tại trong nhánh đã chọn và bị thiếu trong nhánh hiện tại được đánh dấu bằng màu xám

    • Các tệp tồn tại trong nhánh hiện tại nhưng bị thiếu trong nhánh đã chọn được đánh dấu bằng màu xanh lá cây

    • Các tệp chứa sự khác biệt giữa nhánh đã chọn và nhánh hiện tại được đánh dấu bằng màu xanh lam

    Bạn có thể nhấp vào liên kết Hoán đổi nhánh để thay đổi nhánh nào được coi là cơ sở để bạn so sánh với nhánh kia.

  3. Chọn tệp bạn muốn áp dụng cho nhánh hiện tại và chọn Lấy từ nhánh từ menu ngữ cảnh hoặc nhấp vào on the toolbar .

  4. Cam kết và đẩy các thay đổi. IntelliJ IDEA sẽ sao chép toàn bộ nội dung của tệp sang nhánh hiện tại

    Làm cách nào để hợp nhất các nhánh git cục bộ?

    Để thực hiện hợp nhất [cục bộ], git checkout nhánh bạn muốn hợp nhất INTO. Sau đó, nhập git merge . Bởi vì lịch sử của master và lịch sử của make_function chia sẻ tổ tiên chung và không có bất kỳ hậu duệ phân kỳ nào, chúng tôi có được sự hợp nhất "chuyển tiếp nhanh".

    Làm cách nào để cập nhật chi nhánh từ xa với chi nhánh địa phương?

    Kéo đến chi nhánh địa phương của bạn từ xa .
    Trong GitHub Desktop, sử dụng trình đơn thả xuống Nhánh hiện tại và chọn nhánh cục bộ bạn muốn cập nhật
    Để kiểm tra các xác nhận trên nhánh từ xa, hãy nhấp vào Tìm nạp nguồn gốc
    Để kéo bất kỳ xác nhận nào từ nhánh từ xa, hãy nhấp vào Kéo nguồn gốc hoặc Kéo nguồn gốc bằng rebase

    Làm cách nào để hợp nhất nhánh chính với nhánh địa phương?

    Các bước để hợp nhất chủ vào bất kỳ nhánh nào là. .
    Mở cửa sổ Terminal trên máy khách
    Chuyển sang nhánh tính năng
    Sử dụng git để hợp nhất master vào nhánh
    Xem danh sách thư mục để xác thực các tệp từ chính đã được chuyển đến nhánh tính năng

Chủ Đề