Khác Biệt Giữa "git fetch" và "git pull"

Trong bài viết này chúng ta sẽ tìm hiểu về sự khác biệt giữa git fetchgit pull. Tuy nhiên trước khi bắt đầu thì tôi xin phép lưu ý với các bạn về cấu trúc của một Git repository trên máy local sẽ gồm có 3 phần:

  • Working copy: Chứa các file ở commit hiện tại (hay HEAD).
  • Staging index: Chứa các thay đổi đã được thêm vào.
  • Repository: Chứa các commit version với các file tương ứng

Khác Biệt Giữa

Câu lệnh git fetch

Khi chạy câu lệnh git fetch $remote_origin, Git sẽ tải về dữ liệu của tất cả các branch của repository trên remote server nằm tại địa chỉ quy định bởi $remote_origin và cập nhật dữ liệu này với dữ liệu của cách branch phía dưới máy local.

Tuy nhiên git fetch không cập nhật dữ liệu của working copy. Điều này có nghĩa là nếu như có bất cứ thay đổi (commit) nào trên remote server thì chúng cũng không ảnh hưởng tới các tập tin, thư mục của bạn. Tuy nhiên nếu bạn chạy checkout một nhánh nào đó và chạy câu lệnh:

$ git status

Thì lúc này Git sẽ hiển thị cho bạn biết dữ liệu tại working copy có gì khác so với dữ liệu trên remote server hay không.

Câu lệnh git pull

Khi chạy câu lệnh git pull $remote_origin $branch_name, Git sẽ áp thực hiện việc fetch dữ liệu của Git repository tại nhánh $branch_name từ server nằm tại địa chỉ quy định bởi $remote_origin và áp dụng (merge) các thay đổi này vào thư mục và tập tin ở working copy.

Câu lệnh git pull sẽ có thể gây ra xung đột (conflict) trong khi merge.

So Sánh "git fetch" và "git pull"

Như vậy lưu ý rằng câu lệnh git pull $remote_origin $branch_name sẽ tải về (hay fetch) dữ liệu từ một branch duy nhất $branch_name từ remote server và sau đó merge các thay đổi từ remote này vào repository dưới local.

Ngược lại git fetch $remote_origin sẽ tải về (fetch) dữ liệu của toàn bộ các branch trên URL quy định bởi $remote_origin nhưng không thực hiện việc merge các thay đổi này vào local.

1 Bình Luận

Đức Nguyễn Đức Nguyễn

Doc xong van ko hieu ban oi

long manhu long manhu

show log ra local ra khác biết.

Hiếu Vũ Hiếu Vũ

Nó giống việc bạn đi tìm đường vậy. VD có 3 con đường A,B,C.

  • Bạn muốn load dữ liệu của một con đường: VD A thì dùng git pull A
  • Load tất cả A,B,C thì dùng fetch
Trường Tiến Trường Tiến

Hiếu Vũ giải thích dễ hiểu nhưng cho mình hỏi thêm.
Có 1 con đường A thì nó load code ra thư mục chạy lệnh.
Vậy khi có A,B,C thì nó hiển thị như nào vậy ạ? Nó có bị conflic vs nhau ko ?

Content must not be empty

Related Blog