Menu
CoddyTech

Git Fetch vs Pull

Cập nhật lần cuối

git fetch tải các commit mới nhất từ remote nhưng giữ nguyên nhánh bạn đang làm việc. git pull cũng tải như vậy rồi merge ngay các commit đó vào nhánh hiện tại. Nói ngắn gọn: git pull = git fetch + git merge.

Dùng fetch khi muốn xem trước rồi mới quyết định; dùng pull khi đã sẵn sàng tích hợp. Thử cả hai trong playground terminal: một shell thật ngay trên trình duyệt.

git fetch tải commit mới về và chỉ cập nhật origin/main, nhánh của bạn vẫn đứng chờ; git pull merge chúng vào ngay.

So sánh song song

Hành vigit fetchgit pull
Tải commit từ remoteCóCó
Thay đổi nhánh hiện tạiKhôngCó
Có thể gây xung đột mergeKhôngCó
Tương đương vớichỉ tải vềfetch + merge

Cú pháp

LệnhTác dụng
git fetchTải mọi thay đổi từ remote, không merge
git fetch origin mainChỉ fetch một nhánh từ remote
git pullFetch và merge vào nhánh hiện tại
git pull --rebaseFetch, rồi rebase các commit của bạn lên trên
git log HEAD..origin/mainSau khi fetch: xem những gì sẽ được merge

Câu hỏi thường gặp về git fetch và pull

git fetch và git pull khác nhau thế nào?
git fetch tải các commit mới và cập nhật các nhánh remote-tracking (như origin/main) nhưng không thay đổi nhánh bạn đang làm việc. git pull cũng fetch như vậy rồi merge các commit mới vào nhánh hiện tại. Vì thế pull làm thay đổi tệp của bạn, còn fetch chỉ cập nhật những gì bạn biết về remote.
git pull có phải chỉ là fetch cộng merge?
Đúng vậy. git pull là cách viết tắt của git fetch rồi git merge nhánh vừa fetch vào nhánh hiện tại. Với git pull --rebase, bước thứ hai là rebase thay vì merge, giúp lịch sử thẳng hàng.
Khi nào nên dùng fetch thay cho pull?
Dùng git fetch khi bạn muốn xem lại các thay đổi sắp đến trước khi tích hợp, chẳng hạn chạy git fetch rồi git log HEAD..origin/main để thấy chính xác những gì mới. Dùng git pull khi bạn đã tin tưởng các thay đổi trên remote và chỉ muốn merge chúng vào nhánh của mình.
git fetch có bao giờ gây xung đột không?

Không. Fetch chỉ cập nhật các nhánh remote-tracking; nó không bao giờ đụng đến nhánh đang làm việc hay các tệp của bạn, nên không thể gây xung đột merge. Xung đột chỉ phát sinh ở bước merge, bước mà pull tự động thực hiện còn fetch thì không.

Có thể luyện tập lệnh này online không?
Có. Mở playground terminal để chạy git fetch và git pull trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn làm việc với remote từng bước.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu