Đến nay, chúng ta đã thảo luận về các lệnh cơ bản cần thiết để cộng tác trong Git: clone, push và fetch. Nhiều kỹ sư cho rằng chỉ cần ba lệnh này là đã đủ dùng.
Lệnh pull thực chất không thêm bất kỳ chức năng mới nào mà chúng ta chưa biết. Thay vào đó, nó gói gọn hai thao tác thường diễn ra liên tiếp nhau: tải các thay đổi từ remote về, và tích hợp những thay đổi đó vào local repository.
Nói cách khác: pull = fetch + merge.
Điểm trừ lớn của việc sử dụng pull là bạn buộc phải chọn cách tích hợp các thay đổi trước khi thực sự được xem xét chúng ở local.
Những người mới làm quen với Git có thể bối rối vì lệnh pull có thể tự động tạo ra các merge commit. Hãy chắc chắn bạn đã quen thuộc với cả fetching và merging thủ công trước khi đưa pull vào quy trình làm việc chính thức.
git pull <tên-remote> <tên-branch> <tùy-chọn-merge>
Ví dụ:
git pull origin main --ff-only
Ví dụ trên tương đương với việc chạy lần lượt hai lệnh sau theo thứ tự:
git fetch origin main
git merge origin/main --ff-only
Mặc định: Nếu bạn không chỉ định tên remote repository, Git sẽ tự động hiểu là bạn muốn fetch lên origin. Nếu bạn không chỉ định tên branch, Git sẽ mặc định chọn branch mà bạn đang đứng.
Bạn có thể điều khiển cách pull hoạt động thông qua các tùy chọn merge:
--ff-only: (mặc định)
Chỉ tích hợp các thay đổi nếu có thể thực hiện fast-forward merge. Nếu cả local và remote repository đều có các commit mới, tùy chọn này sẽ ngăn pull tự tạo merge commit và sẽ hủy bỏ thao tác ngay sau khi fetching xong.
--ff:
Tạo một merge commit nếu không thể fast-forward. Trong trường hợp này, Git sẽ hiện ra cửa sổ yêu cầu bạn nhập merge commit message trước khi hoàn tất.
--rebase:
Việc thêm tùy chọn --rebase sẽ thay thế hành động merge bằng rebase để tích hợp thay đổi. Các thay đổi ở local của bạn sẽ được chuyển lên trên đầu các commit vừa tải về từ remote repository.
Bạn có thể chạy một trong các lệnh sau để cài đặt flag mặc định cho pull. Sau khi cài, bạn chỉ cần gõ git pull mà không cần thêm tham số:
# Luôn dùng chế độ fast-forward only (khuyên dùng)
git config pull.ff only
# Luôn tạo merge commit nếu cần
git config pull.rebase false
# Luôn sử dụng rebase thay vì merge
git config pull.rebase true
Bạn đã hiểu được các câu lệnh cơ bản để làm việc giữa local và remote repository. Hãy cùng làm bài quiz để kiểm tra kiến thức nhé!