So sánh git fetch và git pull năm 2024

Lệnh git pull và git fetch được dùng để cập nhật dữ liệu mới từ kho chứa ở remote về kho chứa local. Để thực hiện lệnh này tất nhiên bạn phải có kho chứa ở remote và local đã liên kết với nhau. Bạn cần hiểu về remote repository trước!

Lệnh git fetch tải về dữ liệu từ Remote Repo (kho chứa từ xa - trên server/dịch vụ lưu repo, các dữ liệu như các commit, các file, refs). Các dữ liệu này được lấy về và nó lưu vào kho chứa local (trong Repository - thư mục .git), nó không tác động gì đến thư mục đang làm việc (Working Directory - Workspace). Bạn dùng git fetch khi cần lấy dữ liệu từ remote để lưu trữ, theo dõi các commit người khác đã cập nhật lên server, để có được thông thông tin khác nhau giữa remote và local mà không ảnh hưởng đến luồng công việc bạn đang thực hiện

Kho chứa của bạn tên origin, tải về tất cả thông tin của nó từ remote:

git fetch origin

Hoặc

git fetch --all

So sánh git fetch và git pull năm 2024

Hình ảnh trực quan đường đi dư liệu của get fetch và git pull

Tải thông tin của một nhánh cụ thể, ví dụ master của remote origin

git fetch origin master

Sau khi tải về, để có thể khám phá sự khác biệt giữa local và remote bạn có thể xem trạng thái của thư mục làm việc, xem log của một nhánh local và log của nhánh remote ...

Ví dụ: đang làm việc trên master

git log --oneline origin/master # xem log nhánh master của remote origin git log --oneline master # xem log nhánh master của local origin git status # xem log nhánh master của local origin Sau khi kiểm tra sự khác biệt của nhánh giữa remote và local, bạn có thể đánh giá sự thay đổi của dữ liệu, từ đó có các hành động tiếp theo, có thể có vài tình huống:

Trường hợp 1: Thư mục làm việc ở trạng thái Clean (working tree clean - không có thay đổi dữ liệu, hoặc bạn đã commit các thay đổi nếu có). Để cập nhật dữ liệu mới tải kết hợp với Workspace.

git pull origin master # phải có kết nối mạng để cập nhật hoặc git merge origin/master # không cần kết nối mạng, cập nhật từ dữ liệu lấy về từ fetch

Trường hợp 2: Đang làm việc có sự thay đổi ở Workspace - để cập dữ liệu bạn cần thực hiện commit hoặc bỏ các thay đổi (để working tree clean) rồi thực hiện trường hợp 1

Các Video: Sử dụng Git, GitHub

Lệnh git pull

Lệnh

git fetch --all

1 lấy về thông tin từ remote và cập nhật vào các nhánh của local repo (thực hiện lưu vào Repository tức .git và Workspace).

Thi hành lệnh:

git pull

Hoặc chỉ rõ remote

git pull origin

Git tải về thông tin từ remote và ngay lập tức merge cho nhánh đang làm việc. Lệnh

git fetch --all

1 nó tương đương thi hành luôn hai lệnh`git fetch` và

git fetch --all

4

git fetch origin git merge origin/master

Bạn có thể viết lại lịch sử commit của nhánh đang làm việc, cập nhật toàn bộ nhánh remote là base của nó thì thực hiện.

Vì lệnh Git Fetch và Git Merge được sử dụng thường xuyên nên Git đã kết hợp hai lệnh này thành một lệnh đặc biệt gọi là Git Pull. Vậy Git Pull là gì? Nó được sử dụng như thế nào? Trong bài viết này, Got It sẽ mang đến cho các bạn một cái nhìn đầy đủ nhất về lệnh Git Pull.

  • Đọc thêm: Git và GitHub — liệu bạn đã thật sự biết cách sử dụng?

Mục lục

Git Pull là gì?

Git Pull là một lệnh dùng để tải xuống dữ liệu từ một Remote repository và cập nhật Local repository phù hợp với dữ liệu đó. Nói cách khác, Git Pull là lệnh hợp nhất các thay đổi từ Remote repository vào Local repository.

Về bản chất, Git Pull `chính là sự kết hợp của 2 lệnh `Git FetchGit Merge. Giai đoạn đầu, Git Pull sẽ thực thi lệnh Git Fetch ở phạm vi nhánh cục bộ mà HEAD được trỏ đến. Khi dữ liệu được tải xuống, Git Pull sẽ bắt đầu quy trình hợp nhất như Git Merge. Một merge commit mới sẽ được tạo và HEAD cũng được cập nhật để trỏ đến merge commit đó.

So sánh git fetch và git pull năm 2024
Git Pull là sự kết hợp của 2 lệnh Git fetch và Git Merge

Mô hình hoạt động của Git Pull

Sau khi tìm hiểu Git Pull là gì, ở phần này chúng ta sẽ khám phá mô hình hoạt động của Git Pull. Về cơ bản, Git Pull sẽ hoạt động theo một quy trình cơ bản dưới đây:

  • Thực hiện lệnh Git Fetch để tải xuống dữ liệu từ Remote repository được chỉ định.
  • Chạy lệnh Git Merge để hợp nhất các nội dung tham chiếu từ xa và hướng về một local merge commit mới.

Để hiểu rõ hơn mô hình hoạt động của Git Pull, chúng ta sẽ phân tích một ví dụ sau:

So sánh git fetch và git pull năm 2024
Mô hình hoạt động của Git Pull

Giả sử, chúng ta có một repository gồm một nhánh chính (master branch) và một nguồn từ xa (remote origin). Git Pull sẽ tải xuống tất cả các thay đổi từ vị trí mà local và master chuyển hướng. Trong mô hình trên, vị trí tải xuống là E. Git Pull sẽ thực thi lệnh Git Fetch để “nạp” các remote commit được chuyển hướng tại A-B-C. Sau đó, local merge commit mới (H) được tạo ra có nội dung đồng bộ với các remote commit A-B-C.

So sánh git fetch và git pull năm 2024
Theo sơ đồ, H chính là một merge commit mới

Câu lệnh Git Pull dùng để đồng bộ Remote repository vào Local repository thường có cấu trúc sau:

git pull origin branch

Trong đó, origin là tên Remote repository và branch là nhánh muốn đồng bộ.

Ví dụ, để đồng bộ master branch từ Remote repository vào Local repository, chúng ta sẽ dùng lệnh:

git pull origin master

Các tùy chọn phổ biến trong Git Pull

Giống như bất kỳ lệnh nào khác trong Git, lệnh Git Pull cũng có một số tùy chọn giúp sử dụng lệnh một cách tự nhiên và hiệu quả.

  • git pull <remote>: Lấy bản sao remote đã được chỉ định của nhánh hiện tại và hợp nhất nó vào bản sao local. Tùy chọn này giống như lệnh: git fetch origin/git merge origin .
  • git pull –no-commit: Đây là một tùy chọn Git Pull không có cam kết. Thực hiện tìm nạp nội dung remote nhưng không tạo ra merge commit mới.
  • git pull –rebase: Tùy chọn này là Git Rebase giúp hợp nhất remote branch với local branch nhanh chóng.
  • git pull –verbose: Cung cấp verbose output để hiển thị nội dung tải xuống và các chi tiết hợp nhất.

Sự khác biệt giữa Git Pull và Git Fetch

Trong Git, Git PullGit Fetch là 2 lệnh có chức năng tương đồng với nhau. Cả hai đều được sử dụng để tải xuống dữ liệu mới từ một Remote repository. Tuy nhiên, Git Fetch thường được coi là một phiên bản an toàn hơn của Git Pull.

So sánh git fetch và git pull năm 2024
Git Pull và Git Fetch đều tải xuống dữ liệu từ Remote repository

Git Fetch chỉ tải xuống nội dung từ Remote repository mà không làm thay đổi trạng thái của Local repository. Trong khi đó, Git Pull sẽ tải xuống nội dung và cố gắng thay đổi trạng thái của Local repository cho phù hợp với nội dung đó. Điều này có thể dẫn đến hiện tượng xung đột hợp nhất (merge-conflict) trong Git.

Việc sử dụng Git Fetch thường được dùng trong trường hợp có nhiều người làm việc trên cùng một nhánh. Còn Git Pull chỉ nên sử dụng khi có một người làm việc trên nhánh để hạn chế xung đột. Bạn chỉ nên dùng lệnh Git Pull trên một thư mục làm việc sạch (không có thay đổi đã cam kết).

Trên đây là một bức tranh tổng quan về lệnh Git Pull trong Git. Hy vọng bài viết này sẽ giúp các bạn hiểu rõ khái niệm Git Pull là gì và cách hoạt động của Git Pull. Nếu bạn muốn trở thành một lập trình viên, hãy khám phá Git Pull ngay nhé!

Git fetch khác gì git pull?

Git fetch cho phép người dùng tải xuống nội dung từ remote repository mà không làm ảnh hưởng đến trạng thái của local repository. Trong khi đó, lệnh Git pull sẽ thực hiện tải xuống nội dung, đồng thời thay đổi trạng thái của Local repository sao cho phù hợp với nội dung đó.

Git pull là gì?

Git Pull Lệnh git pull được sử dụng để nhận các bản cập nhật từ từ xa. Lệnh này là sự kết hợp của git fetch và git merge, có nghĩa là khi chúng ta sử dụng git pull, nó sẽ nhận các bản cập nhật từ kho lưu trữ từ xa (git fetch) và ngay lập tức áp dụng các thay đổi mới nhất trong local của bạn (git merge).

Git fetch là gì?

Fetch là lệnh hỗ trợ nạp, tải xuống các bản sao của hệ thống lưu trữ và tệp nhánh về máy tính. Với lệnh Git Fetch bạn sẽ dễ dàng hơn trong việc lưu các thay đổi mới vào kho lưu trữ. Người dùng có thể lưu nhiều nhánh trong cùng một thời điểm.

Rebase trong git là gì?

Git Rebase là một trong những phương pháp hợp nhất (merge) các thay đổi từ một nhánh vào nhánh khác trong hệ thống quản lý mã nguồn Git (hay còn gọi là Rebase trong Git). Nói cách khác, Rebase giúp bạn cập nhật một nhánh bằng cách áp dụng các commit mới từ một nhánh khác mà không tạo ra commit merge.