GitHub đã đưa stacked pull requests vào chế độ xem trước công khai (public preview), cho phép các nhà phát triển chia nhỏ một thay đổi lớn thành một chuỗi các PR phụ thuộc lẫn nhau, có thể được xem xét và hợp nhất một cách độc lập.

Tại sao tính năng này lại quan trọng

Một PR đơn lẻ, khổng lồ thường kéo dài quá trình review lên tới cả tháng, khiến người xem xét phải đọc qua những đoạn mã không liên quan. Khi nhánh gốc (base branch) thay đổi, những thay đổi lớn đó rất dễ gặp xung đột hợp nhất (merge conflicts), làm trì trệ việc phát hành. Stacked PR giải quyết cả hai vấn đề này bằng cách biến một diff lớn thành một chuỗi các diff nhỏ hơn, tập trung hơn, trong đó mỗi diff được xây dựng dựa trên diff trước đó.

Cách thức hoạt động

Hãy tạo PR đầu tiên dựa trên nhánh main, sau đó đặt PR tiếp theo dựa trên PR thứ nhất, PR thứ ba dựa trên PR thứ hai, và cứ tiếp tục như vậy. GitHub sẽ tự động theo dõi các mối quan hệ này: nếu bạn chỉnh sửa PR gốc, các PR phụ thuộc sẽ được cập nhật để phản ánh trạng thái mới. Người xem xét có thể phê duyệt toàn bộ ngăn xếp (stack) chỉ với một cú nhấp chuột hoặc phê duyệt từng lớp riêng lẻ.

  • Việc review tập trung vào phạm vi hẹp, giúp phản hồi nhanh hơn.
  • Xung đột giảm xuống vì mỗi PR chỉ tác động đến phần mã được giới thiệu trong lớp của chính nó.
  • Giao diện người dùng (UI) hiển thị phân cấp ngăn xếp, và GitHub CLI cung cấp một câu lệnh duy nhất để khởi tạo một chuỗi các stacked PRs.
gh pr create --title Feature A --base main
gh pr create --title Feature B --base feature-a
gh pr create --title Feature C --base feature-b

Ví dụ dòng lệnh tạo ra ba PR được liên kết với nhau, mỗi PR đều phụ thuộc vào PR trước đó. Quy trình làm việc tương tự cũng có sẵn thông qua giao diện web, nơi bạn có thể sắp xếp lại hoặc loại bỏ một PR khỏi ngăn xếp mà không làm ảnh hưởng đến các PR khác.

Những ai sẽ được hưởng lợi

Các nhóm phát triển tính năng lớn và những người duy trì mã nguồn mở có thể bàn giao các phần việc tăng dần mà không khiến người xem xét phải đối mặt với những thay đổi hỗn loạn không liên quan. Các quản lý phát hành (release managers) sẽ có cái nhìn rõ ràng hơn về những gì đã sẵn sàng để phát hành, vì mỗi lớp trong ngăn xếp có thể được hợp nhất theo lịch trình riêng.

Những lưu ý cần cân nhắc

Tính năng này vẫn đang trong giai đoạn xem trước, vì vậy nó có thể thay đổi trước khi phát hành chính thức. Các nhóm sẽ cần hình thành những thói quen mới xoay quanh việc phân nhánh (branching) và có thể gặp phải các trường hợp biên (edge cases) khi rebase một ngăn xếp đã được hợp nhất một phần. Tài liệu hướng dẫn vẫn đang được hoàn thiện, vì vậy những người dùng sớm có thể mất thêm thời gian để làm quen với các chỉ dẫn trên giao diện người dùng.

Điều gì cần theo dõi tiếp theo

GitHub có khả năng sẽ triển khai tích hợp chặt chẽ hơn với code-owners và các công cụ tự động hóa, đồng thời có thể cung cấp các chỉ số về việc giảm thiểu xung đột. Hãy theo dõi trang thông báo xem trước để cập nhật về thời gian phát hành chính thức (GA - general availability).

Điểm mấu chốt: Stacked pull requests mang lại cho các nhà phát triển một cách thực tế để kiểm soát các thay đổi khổng lồ, biến một PR đơn lẻ đầy xung đột thành một chuỗi các bước có thể quản lý và dễ dàng xem xét. Nếu quy trình làm việc của bạn đang phải vật lộn với các đợt review kéo dài và những cơn đau đầu do hợp nhất mã, bản xem trước này rất đáng để dùng thử.