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

887
28-12-2018
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.

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.

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