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 fetch
và git 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
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.
Guest
- 1970/01/01 Trả lờiDoc xong van ko hieu ban oi
Guest
- 1970/01/01 Trả lờishow log ra local ra khác biết.
Guest
- 1970/01/01 Trả lờiNó giống việc bạn đi tìm đường vậy. VD có 3 con đường A,B,C.
Guest
- 1970/01/01 Trả lờiHiế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 ?
Guest
- 1970/01/01 Trả lờiTrường Tiến bạn có tất cả các nhánh nhưng bạn checkout nhánh nào thì nó hiện nhánh đó, chứ nó không hiện hết. Mình hiểu sơ sơ vậy thôi