Sản phẩm
GitHub Copilot ra mắt tính năng phiên làm việc xếp chồng và tự động tạo Pull Request
(giờ Việt Nam)
Tóm tắt AI
GitHub Copilot giới thiệu tính năng phiên làm việc xếp chồng, cho phép chia nhỏ các tác vụ phức tạp thành chuỗi công việc liên tiếp và tự động tạo Pull Request cho từng phần, giúp quản lý dự án hiệu quả và tránh tình trạng lan man.
Bản dịch AI
Tìm hiểu cách tôi hiện đại hóa một codebase cũ của mình bằng cách sử dụng các phiên xếp chồng (stacked sessions) và pull request trong ứng dụng GitHub Copilot.
30 tháng 7, 2026
6 phút
Tôi muốn bạn dành chút thời gian xem ảnh chụp màn hình này từ ứng dụng GitHub Copilot. Nó khá nhỏ, chứa nhiều biểu tượng, và nó kể một câu chuyện tuyệt vời mà tôi thực sự rất hào hứng.

Hình ảnh này là một tập hợp các phiên xếp chồng. Chúng là một chuỗi các tác vụ trong cùng một repository, nơi mỗi phiên được xây dựng dựa trên phiên trước đó!
Thông tin chi tiết hơn về chúng ở bên dưới, nhưng trước hết, tại sao ảnh chụp màn hình này lại kỳ diệu đến vậy? Chúng ta cần quay lại hơn một thập kỷ trước để bắt đầu. Tôi có một repo rất cũ cho một ứng dụng cá nhân. Tôi tạo nó từ rất lâu rồi (khoảng cuối năm 2014), và nó đã thực hiện đúng những gì tôi muốn (giống như một bảng điều khiển "cuộc sống" cá nhân về lịch, các thiết bị thông minh trong nhà và quản lý tác vụ) trong suốt những năm qua. Thỉnh thoảng tôi có thực hiện vài cập nhật, nhưng việc xử lý chúng ngày càng trở nên khó khăn hơn.
Các dependency của tôi đã trở nên cũ kỹ. Cũ đến mức đáng xấu hổ. Tôi đang sử dụng React 15 (phát hành năm 2016), Less để tiền xử lý CSS, và một phiên bản react-bootstrap từ khoảng thời gian đó. Vâng, bạn đọc đúng rồi đấy. Bootstrap. Nó thực sự đã rất cũ.
Việc cố gắng gỡ rối mớ hỗn độn này trước khi có AI sẽ khiến tôi mất hàng tuần. Tôi đã từng thử và bỏ cuộc trước đây. Nó không phải là ứng dụng lớn nhất thế giới, nhưng nó vừa đủ lớn để gây đau đầu, và công sức bỏ ra đơn giản là không xứng đáng với kết quả thu được.
…nhưng giờ chúng ta đã có AI, vì vậy tôi đã khởi chạy ứng dụng GitHub Copilot, thêm repo vào và bắt đầu.
Bước đầu tiên: Liệu tôi có thể giải quyết tất cả trong một lần không?
Không.
Nhưng tôi đã thử! Đây là câu lệnh (prompt) mà tôi đã sử dụng trong chế độ Plan:
Tôi đã chuyển nội dung này vào Claude Opus 4.8, nhận đánh giá "Rubber Duck" từ GPT-5.5, và phải thực hiện khá nhiều lần trao đổi qua lại để đưa ra quyết định. Khi đã đạt đến trạng thái ưng ý, tôi nhấn “go” và để ứng dụng tự xử lý dự án của mình xem liệu nó có hoạt động không!
…nó không hoạt động, và đó là lỗi của tôi.
Bước thứ hai: Nhận ra tôi đã từng thử việc này trước đây
Vậy, bạn còn nhớ khi tôi nói mình đã “từng thử và bỏ cuộc trước đây” không? Hóa ra, tôi thực sự có một devbranch cũ, nơi tôi đã hiện đại hóa một vài phần, và tôi đã không nhận ra các vấn đề tương thích mà mình sẽ gặp phải.
Nhưng, đó lại là một điều tốt!
Khi tôi chạy phiên bản mới từ phiên làm việc này, tôi nhận ra rằng mình đang tạo nhánh từ main, nhưng bản deployment hiện tại mà tôi thường xuyên sử dụng lại đang dùng phiên bản cập nhật một phần trên dev. Vì vậy, một số tính năng mong muốn mà tôi đã tự tạo cho mình cần phải được đưa vào tập hợp các thay đổi này. Tuy nhiên, các thay đổi đủ lớn đến mức tôi thực sự phải áp dụng chúng vào devbranch để giữ cho mình tỉnh táo một chút, thay vì kéo các thay đổi từ dev vào main.
Trước thời đại AI… trời ơi, điều này chắc chắn sẽ khiến tôi phát điên vì thất vọng. Phải thừa nhận là tôi cũng đã rất thất vọng ở đây. Tôi đã dành thời gian và token để cố gắng chạy nó với kế hoạch mà tôi nghĩ là ổn. Nhưng! Tôi đã có thể chuyển hướng (và chuyển phiên làm việc) chỉ với một yêu cầu đơn giản, điều này thú vị hơn nhiều so với những gì tôi mong đợi:

Mọi thứ không hề lãng phí! Copilot đã tạo một phiên làm việc mới cho tôi, đóng pull request mà tôi đã thử trước đó, và chuyển các quyết định về giao diện của tôi sang những thay đổi mà nó đang áp dụng cho nhánh dev.
Bước thứ ba: Những phát hiện sau khi thử nghiệm
Phù, được rồi, tôi đã có một nhánh tốt và một pull request mà tôi khá hài lòng. Tuy nhiên, khi bắt đầu thử nghiệm, tôi không thể không nhận thấy một vài cảnh báo cũ trong console của mình.
Trái tim tôi chùng xuống khi thấy các tham chiếu cũ đến findDOMNode và componentWillReceiveProps, những hàm mà cá nhân tôi đã không đụng đến trong nhiều năm trời. Ôi chao.
Những tham chiếu đó không còn xuất hiện nhiều trong codebase của tôi nữa, nhưng chúng lại nằm trong react-bootstrap. Tôi mở lại chế độ Plan, vì tôi cần tìm hiểu xem liệu việc nâng cấp có hiệu quả không, hay tôi nên loại bỏ hoàn toàn thư viện này:
Chạy lệnh này đã cho tôi một kế hoạch hợp lý, thảo luận về các tùy chọn và khuyến nghị nên thay thế hoàn toàn thư viện đó.
Bước thứ tư: Xếp chồng một phiên làm việc lên trên phiên khác
Tôi cần đảm bảo các thay đổi của mình an toàn so với công việc hiện tại, nhưng việc thay thế react-bootstrap có vẻ là một sự mở rộng phạm vi (scope creep) quá lớn so với những gì tôi đang làm.
Tôi nhận thấy rằng trong rất nhiều công việc kỹ thuật "có tính tác nhân" (agentic) của mình, việc tránh kiểu mở rộng phạm vi này là cực kỳ khó. Bởi vì tôi không phải tự viết tất cả code, nên rất dễ bị cám dỗ để tạo ra các pull request dài 10.000 dòng nhằm giải quyết tất cả những thứ tôi muốn làm! Mà thực ra đó chỉ là một hình thức trì hoãn mới, ha.
Vì vậy, thay vì tạo ra một pull request khổng lồ để tự kiểm tra, tôi đã chia nhỏ nó bằng một phiên làm việc mới và đưa ra yêu cầu:
Đây là phần khiến tôi cảm thấy kỳ diệu đến mức muốn viết bài blog này. Ứng dụng GitHub Copilot:
ĐIỀU NÀY THẬT TUYỆT VỜI. Các phiên xếp chồng và các pull request xếp chồng? Đây có phải là tương lai không?
ĐÚNG VẬY.
Trong trường hợp bạn chưa hiểu tên gọi đó nghĩa là gì: Một stack là một chuỗi các pull request trong cùng một repository, nơi mỗi pull request nhắm mục tiêu vào nhánh của pull request bên dưới nó, tạo thành một chuỗi có thứ tự và cuối cùng được hợp nhất vào nhánh main của bạn.
Trong trường hợp của tôi, không chỉ các phiên làm việc nối tiếp nhau, mà các thay đổi của chúng cũng vậy!
Bước thứ năm: Về đích với các pull request xếp chồng
Tôi biết mình có chút tinh nghịch khi thể hiện sự phấn khích này, nhưng niềm hạnh phúc của tôi là chân thành. Việc vận chuyển các thay đổi này một cách dễ dàng là một trải nghiệm thú vị sau khi đã bỏ bê codebase cũ của mình trong một thời gian dài.
Hãy nhìn lại ảnh chụp màn hình đầu tiên đó: Tôi sẽ hướng dẫn bạn xem qua nó.

Bài viết được AI dịch và tổng hợp tự động từ GitHub Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.