Tìm hiểu các kiểu merge

Git nâng cao

Amanda Crawford-Adamo

Software and Data Engineer

Tôi là Amanda

Ảnh của Amanda

Git nâng cao

Git merge là gì?

Lệnh git merge:

git merge
  • Gộp thay đổi từ một nhánh vào nhánh khác
  • Tìm base chung giữa hai nhánh
  • Có nhiều chiến lược merge

Con đường nơi hai đường nhập lại với hai ô tô nhập vào cùng một đường

Git nâng cao

Fast-forward merge

Fast-forward merge là gì?

  • Giữ lịch sử thẳng, đơn giản
  • Lý tưởng cho nhánh ngắn, thay đổi đơn giản

$$

Khi không nên dùng

  • Cần giữ lịch sử nhánh
  • Phát triển tính năng phức tạp trên nhánh sống lâu
  • Xung đột merge giữa nhánh — fast-forward sẽ thất bại ngay!
Git nâng cao

Fast-forward merge (trước)

Biểu đồ có hai nhánh: main và feature. Main có hai commit. Feature tách ra sau commit mới nhất của main với một commit thêm.

Git nâng cao

Cú pháp fast-forward merge

Git merge fast-forward mặc định

git checkout main
git merge feature_branch

Buộc fast-forward

git merge <branch> --ff-only

Ví dụ

git checkout main
git merge feature_branch --ff-only
Git nâng cao

Fast-forward merge (sau)

Biểu đồ có hai nhánh: main và feature. Main có ba commit. Feature tách ra sau commit thứ hai của main với một commit thêm. Commit thứ ba của main là bản sao commit mới nhất của feature.

Git nâng cao

Recursive merge

Recursive merge là gì?

  • Tạo một merge commit với hai parent
  • Giữ toàn bộ lịch sử dự án
  • Lý tưởng cho nhánh sống lâu
  • Duy trì cấu trúc phân nhánh

$$

Khi không nên dùng

  • Khi cần lịch sử đơn giản, tuyến tính
  • Thay đổi nhỏ, nhanh
Git nâng cao

Recursive merge (trước)

Biểu đồ có hai nhánh: main và feature. Main có ba commit. Feature tách ra sau commit đầu tiên của main với hai commit thêm trên nhánh của nó.

Git nâng cao

Cú pháp recursive merge

Lệnh recursive merge:

git merge --no-ff <branch>

Ví dụ

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge --no-ff feature_branch
Merge made by the 'recursive' strategy.
...
Git nâng cao

Recursive merge (sau)

Biểu đồ có hai nhánh: main và feature. Main có sáu commit. Feature tách ra sau commit mới nhất của main với hai commit thêm. Sáu commit của main là xen kẽ toàn bộ commit của main và feature. Commit mới nhất của main là merge commit với hai parent: commit mới nhất của feature và commit trước đó của main.

Git nâng cao

Tóm tắt

  • Fast-forward giữ lịch sử đơn giản, tuyến tính
  • Recursive giữ bối cảnh lịch sử
  • Recursive phù hợp phát triển phức tạp

Lệnh fast-forward merge

git merge <branch_name> # lệnh mặc định
git merge --ff-only <branch_name> # buộc fast-forward

Lệnh recursive merge

git merge --no-ff <branch_name>
Git nâng cao

Ayo berlatih!

Git nâng cao

Preparing Video For Download...