Các kịch bản merge phức tạp

Git nâng cao

Amanda Crawford-Adamo

Software and Data Engineer

Repo pipeline dữ liệu chuyến bay

Sơ đồ thư mục repo pipeline dữ liệu chuyến bay và các tệp. Thư mục làm việc Git có 4 tệp: etl.py, load.py, transform.py, ingest.py. Thư mục data có tệp flight_data.csv. Thư mục .git cũng được hiển thị.

Git nâng cao

Git squash merging

$$

Chức năng

  • Tạo một commit mới duy nhất trên nhánh đích
  • Gộp mọi thay đổi từ nhánh nguồn
    • Thêm commit thường với một cha (khác chiến lược recursive)
  • Thêm vào nhánh đích (không phải nhánh feature)
    • Không giữ lịch sử commit chi tiết của nhánh nguồn

$$

Ưu điểm

  • Lịch sử sạch, tuyến tính
  • Đơn giản hóa review cho tính năng lớn
  • Dễ revert toàn bộ tính năng
Git nâng cao

Ví dụ merge squash

Nhánh data-cleanup tách khỏi main sau commit thứ hai. Main có thêm một commit. Data-cleanup có thêm hai commit.

Git nâng cao

Quy trình merge squash

  1. Checkout nhánh main

    $ git checkout main
    
  2. Tạo squash commit cho mọi thay đổi của data-cleanup

    $ git merge --squash data-cleanup
    
  3. Commit squash vào lịch sử nhánh main

    $ git commit -m "Implement and optimize data cleanup"
    
Git nâng cao

Kết quả merge squash

Biểu đồ với hai nhánh: main và data-cleanup. Main có bốn commit. Nhánh feature tách ra sau commit mới nhất của main với một commit bổ sung. Commit mới nhất trên main là commit có một cha, chứa các commit đã squash từ các commit bổ sung của data-cleanup.

Git nâng cao

Git octopus merge

$$

Chức năng

  • Merge từ ba nhánh trở lên cùng lúc
  • Tạo một merge commit duy nhất với nhiều cha
  • Phù hợp khi các nhánh không xung đột

$$

Ưu điểm

  • Hữu ích để tích hợp đồng thời nhiều tính năng độc lập
  • Dùng để đồng bộ nhiều nhánh phát hành cho các phiên bản khác nhau
Git nâng cao

Ví dụ octopus merge

Minh họa bốn nhánh phát triển: main, ingestion, transform và load. Ba nhánh ingestion, transform, load tách khỏi main sau commit đầu tiên, mỗi nhánh có thêm một commit. Main cũng có thêm một commit.

Git nâng cao

Lệnh octopus merge

Lệnh Git Octopus Merge

git merge -s octopus

Ví dụ

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Git nâng cao

Kết quả octopus merge

Minh họa bốn nhánh phát triển: main, ingestion, transform và load. Ba nhánh ingestion, transform, load tách khỏi main sau commit đầu tiên, mỗi nhánh có thêm một commit. Main có năm commit, chứa các commit của các nhánh khác. Commit merge cuối cùng có bốn cha: commit mới nhất trước đó của main và commit mới nhất của ingest, transform, load.

Git nâng cao

Tóm tắt

Squash merge

  • Đơn giản hóa lịch sử, gộp nhiều commit thành một
  • Dùng squash merge để lịch sử gọn gàng
    git merge --squash <source_branch>
    

Octopus merge

  • Giữ nguyên cấu trúc nhánh
  • Merge nhiều nhánh cùng lúc
  • Tích hợp hiệu quả nhiều phát triển song song
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Git nâng cao

Hãy luyện tập!

Git nâng cao

Preparing Video For Download...