Git pull là gì? Khác gì với Git fetch?

1794
05-07-2024
Git pull là gì? Khác gì với Git fetch?

Git pull được kết hợp từ hai lệnh Git fetch và Git merge nhằm tạo sự thuận tiện cho người dùng trong quá trình sử dụng. Vậy Git pull là gì và được sử dụng như thế nào? Cùng Bizfly Cloud tìm hiểu về lệnh Git pull trong bài viết hôm nay nhé.

Git pull là gì?

Lệnh Git pull được sử dụng để tìm nạp (fetch) và tải xuống nội dung từ remote repository và cập nhật local repository sao cho phù hợp với nội dung đó. Hợp nhất các thay đổi remote upstream vào local repository là một nhiệm vụ phổ biến trong các luồng công việc cộng tác dựa trên Git. Lệnh Git pull sự kết hợp của hai lệnh git fetch và git merge. Trong giai đoạn đầu tiên của hoạt động, git pull sẽ thực thi một git fetch nằm trong phạm vi nhánh cục bộ mà HEAD được chỉ vào. Khi nội dung được tải xuống, Git pull sẽ nhập workflow hợp nhất. Một cam kết hợp nhất mới sẽ được tạo và HEAD được cập nhật để trỏ đến cam kết mới (commit).

Git pull hoạt động như thế nào?

Lệnh Git pull trước tiên chạy git fetch để tải nội dung từ remote repository đã chỉ định. Sau đó, một git merge được thực thi để hợp nhất các remote content ref và head vào một local merge commit mới. Để thể hiện rõ hơn quá trình kéo (pull) và sáp nhập (merge), chúng ta hãy xem xét ví dụ sau. Giả sử chúng ta có một kho lưu trữ với một nhánh chính và một nguồn từ xa.

Git pull là gì? Khác gì với git fetch - Ảnh 1.

Trong trường hợp này, Git pull sẽ tải xuống tất cả các thay đổi từ điểm mà local và master chuyển hướng. Trong ví dụ này, điểm đó là E. Git pull sẽ tìm nạp các remote commit được chuyển hướng là A-B-C. Quá trình pull sau đó sẽ tạo ra một local merge commit mới chứa nội dung của các remote commit được chuyển hướng mới.

Git pull là gì? Khác gì với git fetch - Ảnh 2.

Trong sơ đồ trên, chúng ta có thể thấy commit mới H. Commit này là một merge commit mới chứa nội dung của các remote commit A-B-C và có thông báo log message. Ví dụ này là một trong một vài chiến lược hợp nhất git pull. Tùy chọn --rebase có thể được chuyển cho Git pull để sử dụng chiến lược hợp nhất rebase thay vì merge commit. Ví dụ tiếp theo sẽ cho thấy cách rebase pull hoạt động. Giả sử rằng chúng ta đang ở sơ đồ đầu tiên và đã thực hiện git pull --rebase.

Git pull là gì? Khác gì với git fetch - Ảnh 3.

Trong sơ đồ này, chúng ta có thể thấy rằng một rebase pull không tạo ra H commit mới. Thay vào đó, rebase đã sao chép các remote commits A--B--C và gắn chúng vào local origin/master commit history.

Khi nào nên sử dụng Git Pull?

Git Pull thường được sử dụng trong các trường hợp sau đây:

  • Cập nhật trước khi làm việc: Trước khi bắt đầu làm việc trên một tính năng, bạn nên sử dụng git pull để đảm bảo mình đang làm việc trên phiên bản mới nhất của mã nguồn.
  • Cập nhật sau khi hoàn thành một tính năng hoặc sửa lỗi: Sau khi đã hoàn thành và commit xong một tính năng hoặc lỗi, bạn nên sử dụng git pull để đảm bảo không có xung đột hoặc thay đổi mới từ kho mã nguồn từ xa trước khi bạn thực hiện một push.
  • Khi cần tích hợp các thay đổi: Nếu đồng nghiệp của bạn đã thực hiện các thay đổi quan trọng mà bạn cần tích hợp vào công việc của mình, hãy sử dụng git pull để lấy các thay đổi đó về.
  • Khi có thông báo về các thay đổi mới: Nếu nhận được thông báo từ hệ thống hoặc từ các đồng nghiệp rằng có các thay đổi mới đã được đẩy lên kho mã nguồn từ xa, bạn cần sử dụng git pull để cập nhật kho mã nguồn của mình.
  • Trước khi tạo một branch mới: Nếu bạn tạo một nhánh mới để làm việc trên một tính năng hoặc sửa lỗi, bạn nên git pull để đảm bảo nhánh của bạn được tạo từ phiên bản mới nhất của nhánh cơ sở.

Ưu điểm và hạn chế của Git Pull

Git Pull sở hữu các ưu điểm và hạn chế sau đây:

Ưu điểm

  • Tiện lợi và nhanh chóng: git pull kết hợp hai lệnh (fetch và merge) thành một lệnh duy nhất, giúp tiết kiệm thời gian và công sức. Ngoài ra, quá trình cập nhật kho lưu trữ bằng một lệnh duy nhất trở nên đơn giản hóa hơn.
  • Đồng bộ hóa với kho lưu trữ từ xa: Người dùng có thể nhanh chóng cập nhật các thay đổi mới nhất từ kho lưu trữ từ xa vào nhánh hiện tại và đảm bảo rằng bạn luôn làm việc với phiên bản mới nhất của mã nguồn.
  • Quản lý hợp nhất tự động: Git sẽ tự động xử lý quá trình hợp nhất nếu không có xung đột. Nếu có xung đột, Git sẽ thông báo cho bạn để bạn có thể giải quyết chúng.

Nhược điểm

  • Rủi ro xung đột mã nguồn: Khi hợp nhất, nếu có xung đột, bạn sẽ phải giải quyết chúng, điều này có thể gây ra sự gián đoạn trong công việc của bạn. Đối với các dự án lớn, xung đột có thể phức tạp và tốn nhiều thời gian để giải quyết.
  • Thiếu kiểm soát chi tiết: Khi sử dụng git pull, bạn không có cơ hội kiểm tra các thay đổi trước khi hợp nhất chúng vào nhánh của mình, điều này có thể dẫn đến việc hợp nhất các thay đổi không mong muốn. Nếu có vấn đề xảy ra sau khi sử dụng git pull, việc xác định nguyên nhân có thể khó khăn hơn so với việc sử dụng các lệnh git fetch và git merge riêng biệt.
  • Không linh hoạt: Bạn không thể kiểm tra các thay đổi từ xa trước khi hợp nhất chúng vào nhánh của mình. Trong một số trường hợp, bạn có thể muốn kiểm soát kỹ hơn về cách các commit từ xa được hợp nhất vào nhánh của mình, điều mà git pull không cung cấp được.

Git pull khác với Git fetch như thế nào?

Git pull và Git fetch là 2 lệnh có chức năng khá tương tự nhau, đều được sử dụng để download dữ liệu mới từ một Remote repository. Tuy vậy, Git fetch thường được xem như phiên bản an toàn hơn của 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 đó. Điều này có thể gây ra hiện tượng xung đột hợp nhất (merge-conflict) trong Git.

Git fetch thường được sử dụng trong trường hợp có nhiều người dùng làm việc trên cùng một nhánh. Còn với Git pull, bạn chỉ nên sử dụng khi chỉ có một mình bạn làm việc trên nhánh và trên một thư mục làm việc sạch (thư mục không có thay đổi đã được cam kết).

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

git pull <remote>

Lấy bản sao từ xa được chỉ định của nhánh hiện tại và ngay lập tức hợp nhất nó vào bản sao local. Điều này giống như git fetch <remote> theo sau là git merge origin/<current-branch>.

git pull --no-commit <remote>

Tương tự như lời gọi mặc định (default invocation), tìm nạp remote content nhưng không tạo ra một merge commit mới.

git pull --rebase <remote>

Tương tự như pull trước, Thay vì sử dụng git merge để tích hợp nhánh từ xa với nhánh cục bộ, hãy sử dụng git rebase.

git pull --verbose

Cung cấp verbose output khi pullo, hiển thị nội dung được tải xuống và các chi tiết hợp nhất.

Git pull và syncing

Git pull là một trong nhiều lệnh yêu cầu "đồng bộ hóa" remote content. Lệnh Git remote được sử dụng để xác định remote endpoint nào mà các lệnh đồng bộ hóa sẽ hoạt động. Lệnh Git push được sử dụng để tải nội dung lên remote repository.

Có thể hoàn tác được thao tác Git Pull đã thực hiện không?

Người dùng hoàn toàn có thể hoàn tác thao tác git pull đã thực hiện. git pull thực hiện hai thao tác chính:

  • Git fetch: Đây là bước để lấy các thay đổi từ remote repository về local repository mà không thực hiện việc merge vào branch hiện tại.
  • Git merge: Bước này thực hiện việc merge các thay đổi từ remote repository vào branch hiện tại.

Nếu bạn muốn hoàn tác git pull, bạn cần:

  • Trường hợp chỉ muốn hoàn tác việc merge (bước 2), bạn có thể sử dụng lệnh git reset hoặc git rebase.
  • Còn trường hợp muốn hoàn tác cả việc fetch (bước 1), bạn có thể reset lại remote-tracking branch về trạng thái trước khi fetch.

Tại sao lệnh Git Pull cũng có thể được viết thành Git Pull Origin Master?

Lệnh git pull và git pull origin master đều có thể được sử dụng để cập nhật mã nguồn từ nhánh master trên remote repository origin. Tuy nhiên, cách sử dụng của chúng có sự khác nhau:

1. Lệnh git pull được sử dụng để kéo các thay đổi từ remote repository (mặc định là origin) và thực hiện một phép merge vào nhánh hiện tại (trong trường hợp này là master hoặc nhánh hiện tại bạn đang làm việc).

2. Lệnh git pull origin master cụ thể hơn với hai đối số: Remote repository bạn muốn kéo dữ liệu từ đó. origin là tên mặc định được Git sử dụng khi bạn clone một repository, nhưng bạn có thể có nhiều remote repository khác nhau và master nhánh bạn muốn cập nhật từ remote repository đó.  

Khi sử dụng git pull origin master, bạn chỉ định kéo remote repository origin và từ nhánh master. Nó sẽ phù hợp trong trường hợp người dùng đang làm việc với nhiều remote repository hoặc muốn cập nhật từ một nhánh cụ thể trên remote repository.

Theo Bizfly Cloud chia sẻ

Kể từ ngày 05/11/2018, VCCloud chính thức đổi tên thành Bizfly Cloud - là nhà cung cấp các dịch vụ đám mây hàng đầu tại Việt Nam hiện nay với các dịch vụ nổi bật như: Bizfly Cloud Server, Bizfly CDN, Bizfly Load Balancer, Bizfly Pre-built Application, Bizfly Business Mail, Bizfly Simple Storage. Hãy tăng tốc thích nghi cho doanh nghiệp cùng các giải pháp công nghệ của Bizfly Cloudtại đây.

TAGS: git pull
SHARE