TẤT CẢ Push, pull, fetch: đồng bộ code với GitHub

Push, pull, fetch: đồng bộ code với GitHub

SEO 100/100 A+

📚 Git & GitHub Series (Bài 8/15) — Đã có repository GitHub ở Bài 7, giờ ta học bộ ba đồng bộ, bắt đầu bằng git push.

Git push, pullfetch là ba lệnh bạn dùng mỗi ngày để đồng bộ code giữa máy cá nhân và GitHub. Hiểu rõ sự khác biệt giữa chúng giúp bạn tránh hai nỗi sợ lớn nhất của người mới: ghi đè mất việc của người khác, và "kẹt" không push được. Bài này giải thích từng lệnh kèm luồng làm việc an toàn.

Bức tranh tổng thể

Sau khi đã kết nối remote ở Bài 6, việc đồng bộ diễn ra theo hai chiều:

  • Lên remote: git push — đẩy commit của bạn lên GitHub.
  • Về máy: git fetchgit pull — lấy thay đổi của người khác về.

Hãy hình dung remote là "bảng tin chung", còn máy bạn là "bản nháp riêng". Bạn push để đăng lên bảng tin, pull để cập nhật những gì người khác đã đăng.

git push — đẩy commit lên GitHub

git push -u origin main

Lần đầu, tham số -u (viết tắt của --set-upstream) thiết lập nhánh main local theo dõi origin/main. Từ lần sau, bạn chỉ cần:

git push

Theo tài liệu git push, lệnh này chỉ đẩy các commit đã có trên máy — nên nhớ luôn git commit trước khi push.

git fetch — xem trước, chưa gộp

git fetch tải về mọi commit, nhánh mới từ remote, nhưng không đụng vào nhánh làm việc của bạn:

git fetch origin
git log origin/main --oneline

Sau fetch, bạn có thể xem origin/main đã đi tới đâu trước khi quyết định gộp. Đây là cách an toàn nhất để biết người khác đã làm gì.

git pull — fetch rồi merge

git pull là tổ hợp của hai bước: fetch về rồi merge ngay vào nhánh hiện tại:

git pull origin main

Tiện lợi, nhưng vì gộp ngay nên có thể phát sinh conflict cần xử lý (kỹ năng đã học ở Bài 5). Một số người thích git pull --rebase để giữ lịch sử thẳng — chủ đề của Bài 10 về rebase.

So sánh nhanh ba lệnh

LệnhTải về remote?Thay đổi nhánh local?
git fetchKhông
git pullCó (merge ngay)
git pushNgược lại (đẩy lên)Không (đổi remote)

Luồng làm việc an toàn hằng ngày

Để tránh xung đột và ghi đè, hãy theo nhịp này:

  1. git pull đầu buổi để cập nhật mới nhất.
  2. Tạo nhánh tính năng, làm việc, commit.
  3. git pull (hoặc fetch) lần nữa trước khi push nếu làm lâu.
  4. git push để đẩy lên.
  5. Mở Pull Request (Bài 9) thay vì push thẳng main.

Đây cũng đúng nguyên tắc của blog này: mọi thay đổi đi qua nhánh và Pull Request, không push trực tiếp lên main.

Xử lý khi push bị từ chối

Thông báo ! [rejected] ... (fetch first) nghĩa là remote có commit mới hơn. Cách xử lý đúng:

git pull --no-rebase origin main
git push

⚠️ Tránh git push --force trừ khi bạn thật sự hiểu — nó ghi đè lịch sử remote và có thể xóa việc của người khác. Nếu buộc phải force, hãy ưu tiên --force-with-lease an toàn hơn.

Theo dõi nhánh (tracking branch) là gì?

Khi bạn chạy git push -u origin main, Git ghi nhớ rằng nhánh main local "theo dõi" origin/main. Nhờ vậy:

  • git status cho biết bạn đang đi trước (ahead) hay đi sau (behind) remote bao nhiêu commit.
  • git pushgit pull không cần nêu lại tên remote và nhánh.

Bạn có thể xem quan hệ theo dõi bằng git branch -vv. Mỗi nhánh local có thể theo dõi một nhánh remote tương ứng, giúp Git biết đẩy đi đâu và kéo từ đâu — bớt gõ và bớt nhầm.

Tóm lại

Bộ ba git push / pull / fetch là nhịp tim của làm việc với GitHub: push đẩy việc của bạn lên, fetch xem trước thay đổi của người khác, pull tải và gộp. Quy tắc vàng cho người mới: pull trước khi push, và đừng force khi chưa hiểu.

Bài 9, chúng ta học quy trình cộng tác chuẩn của GitHub: Pull Request và cách review code — trái tim của làm việc nhóm hiện đại.

Tham khảo & Nguồn dữ liệu

1. Liên kết bên ngoài được sử dụng trong bài viết

2. Liên kết nội bộ liên quan

3. Bản quyền & Ghi nguồn

Một phần dữ liệu trong bài viết được tham khảo từ tài liệu git push. Mọi thương hiệu, tên sản phẩm và tài liệu gốc thuộc quyền sở hữu của chủ sở hữu tương ứng. Bài viết chỉ trích dẫn, tổng hợp và phân tích — không nhằm thay thế tài liệu chính thức.

Câu hỏi thường gặp

git fetch và git pull khác nhau thế nào?
git fetch chỉ tải dữ liệu mới từ remote về nhưng không thay đổi nhánh làm việc của bạn, để bạn xem trước. git pull = git fetch + git merge: vừa tải vừa gộp ngay vào nhánh hiện tại.
Lệnh git push dùng để làm gì?
git push đẩy các commit từ máy bạn lên repository remote (GitHub). Lần đầu nên dùng git push -u origin main để thiết lập nhánh theo dõi; các lần sau chỉ cần git push.
Vì sao push bị từ chối (rejected)?
Thường vì remote có commit mới hơn mà máy bạn chưa có. Hãy git pull để gộp thay đổi từ remote về, xử lý conflict nếu có, rồi git push lại. Tránh dùng --force trừ khi thật sự hiểu hậu quả.

💬 BÌNH LUẬN

Đăng nhập GitHub để comment. Hỗ trợ markdown, reaction, reply.

S-DNA · CI/CD Monitor

Live TheoDoi8

🔄 running
theodoi8@github-actions

Đang tải terminal theodoi8…