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

Thái Nguyễn

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 Phản Hồi

Thêm Phản Hồi

Bài Viết Liên Quan