Domain 4 · 9 phút đọc

Fork và Pull Request: cộng tác qua nền tảng

Fork and Pull Request Workflow

Khi đóng góp cho một dự án mà bạn không có quyền đẩy trực tiếp (ví dụ open-source), bạn dùng forkPull Request. Đây là cách cộng tác chuẩn trên GitHub và GitLab.

Fork khác clone thế nào

git clone tạo một bản sao repo về máy local của bạn. Fork tạo một bản sao repo trên tài khoản của bạn trên server (GitHub/GitLab).

Tiêu chíCloneFork
Bản sao nằm ởMáy local của bạnTài khoản bạn trên server
Là thao tác củaGit (lệnh)Nền tảng (GitHub/GitLab)
Quyền ghiVào bản localVào fork của bạn trên server
Dùng đểLàm việc trên máyĐóng góp khi không có quyền push gốc

Quy trình điển hình: fork trên server để có bản của riêng mình, rồi clone fork đó về máy để làm việc.

Quy trình Pull Request

Một Pull Request (GitLab gọi là Merge Request) là đề nghị gộp thay đổi của bạn vào repo gốc, kèm nơi để thảo luận và review.

Các bước cộng tác qua fork:

# 1. Fork repo gốc trên GitHub (bấm nút Fork)
# 2. Clone fork của bạn về máy
git clone https://github.com/ban/repo.git

# 3. Tạo nhánh cho thay đổi
git switch -c fix/typo

# 4. Commit và đẩy lên fork của bạn
git push -u origin fix/typo

# 5. Mở Pull Request từ fork sang repo gốc (trên giao diện web)

Sau khi mở PR, maintainer của repo gốc xem xét và có thể merge, yêu cầu sửa, hoặc đóng PR.

Vai trò của review

Review là bước người khác đọc và đánh giá code trước khi merge. Đây là chốt chặn chất lượng quan trọng:

  • Phát hiện lỗi, vấn đề bảo mật, thiết kế chưa hợp lý.
  • Đảm bảo code theo quy ước chung của dự án.
  • Chia sẻ kiến thức trong đội.
  • Reviewer để lại comment; bạn sửa và đẩy thêm commit — PR tự cập nhật.

Nhiều dự án bắt buộc PR phải được approvepass CI (test, lint) trước khi được merge.

Dùng upstream để sync fork

Fork của bạn không tự cập nhật khi repo gốc có commit mới. Bạn thêm repo gốc làm remote tên upstream rồi đồng bộ:

# Thêm repo gốc làm remote upstream (origin vẫn là fork của bạn)
git remote add upstream https://github.com/goc/repo.git

# Tải commit mới từ repo gốc
git fetch upstream

# Gộp vào nhánh main local của bạn
git switch main
git merge upstream/main

# Đẩy main đã cập nhật lên fork
git push origin main

origin và upstream

Theo quy ước: origin = fork của bạn (đẩy code lên đây để mở PR), upstream = repo gốc (chỉ kéo về để sync, thường không có quyền đẩy lên).

Luôn tạo nhánh cho PR

Đừng làm việc trực tiếp trên main của fork. Tạo nhánh riêng cho mỗi thay đổi để main luôn sạch và dễ sync với upstream, đồng thời mở được nhiều PR song song.

Trọng tâm thi

Fork = bản sao repo trên server (thao tác của nền tảng); clone = bản sao về máy (lệnh Git). Đóng góp khi không có quyền push: fork → clone → nhánh → push lên fork → mở Pull Request. Thêm remote upstream = repo gốc để fetch/merge sync fork.

Tóm tắt

  • Clone = bản sao về máy local; fork = bản sao trên tài khoản bạn ở server.
  • Quy trình đóng góp: fork → clone fork → tạo nhánh → push lên fork → mở Pull Request.
  • Pull Request là đề nghị gộp kèm nơi thảo luận và review.
  • Review giúp bắt lỗi, giữ chất lượng và chia sẻ kiến thức; nhiều dự án yêu cầu approve + pass CI.
  • Thêm remote upstream (repo gốc) và fetch/merge để sync fork; origin vẫn là fork của bạn.