Trong chế độ mặc định của nó, git pull là viết tắt của git fetch, sau đó là git merge FETCH_HEAD.
Khi bạn thực hiện một git pull origin master
, hãy
git pull
thực hiện hợp nhất, điều này thường tạo ra một cam kết hợp nhất. Do đó, theo mặc định, việc kéo từ điều khiển từ xa KHÔNG phải là một thao tác vô hại: nó có thể tạo ra một cam kết mới chưa tồn tại trước đây. Hành vi này có thể gây nhầm lẫn cho người dùng, vì những gì cảm thấy giống như một hoạt động tải xuống vô hại thực sự thay đổi lịch sử cam kết theo những cách không thể đoán trước.
Để tránh điều này, bạn cần
git pull --ff-only
(hay không? đọc tiếp để xem cái nào phù hợp với nhu cầu của bạn)
Với git pull --ff-only
, Git sẽ cập nhật chi nhánh của bạn chỉ khi nó có thể được "chuyển tiếp nhanh" mà không cần tạo cam kết mới. Nếu điều này không thể được thực hiện, git pull --ff-only
chỉ cần hủy bỏ với một thông báo lỗi.
Bạn có thể định cấu hình ứng dụng khách Git của mình để luôn sử dụng --ff-only
theo mặc định, vì vậy bạn sẽ có hành vi này ngay cả khi bạn quên cờ dòng lệnh:
git config --global pull.ff only
Lưu ý: --global
Cờ áp dụng thay đổi cho tất cả các kho lưu trữ trên máy của bạn. Nếu bạn muốn hành vi này chỉ cho kho lưu trữ bạn đang ở, hãy bỏ qua cờ.
Lấy từ đây
Cảnh báo này đã được thêm vào trong Git 2.27, như được chỉ ra bởi Joe trong câu trả lời của anh ấy.
Đây là cảnh báo hoàn chỉnh trông như thế nào:
Không khuyến khích việc kéo mà không xác định rõ cách điều hòa các nhánh phân kỳ. Bạn có thể bỏ qua thông báo này bằng cách chạy một trong các lệnh sau đây vào lúc nào đó trước lần kéo tiếp theo:
git config pull.rebase false # merge (chiến lược mặc định)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
Bạn có thể thay thế "git config" bằng "git config --global" để đặt tùy chọn mặc định cho tất cả các kho. Bạn cũng có thể chuyển --rebase, --no-rebase hoặc --ff-only trên dòng lệnh để ghi đè mặc định đã định cấu hình cho mỗi lần gọi.
Cảnh báo hiển thị ba lệnh dưới dạng tùy chọn, tất cả những lệnh này sẽ ngăn cảnh báo. Nhưng chúng phục vụ các mục đích khác nhau:
git config pull.rebase false # merge (the default strategy)
Điều này giữ nguyên hành vi mặc định và loại bỏ cảnh báo.
git config pull.rebase true # rebase
Điều này thực sự cam kết trên đầu nhánh từ xa, duy trì một nhánh duy nhất cả cục bộ và từ xa (không giống như hành vi mặc định có liên quan đến hai nhánh khác nhau - một trên cục bộ và một trên từ xa - và để kết hợp cả hai, hợp nhất được thực hiện ).
git config pull.ff only # fast-forward only
Điều này chỉ thực hiện kéo nếu nhánh cục bộ có thể được chuyển tiếp nhanh. Nếu không, nó chỉ dừng lại với một thông báo lỗi (và không tạo ra bất kỳ cam kết nào).
Cập nhật:
Nếu bạn có Git 2.29
trở lên, bây giờ bạn có thể thiết lập pull.ff
để false
, true
hoặc only
để thoát khỏi cảnh báo.
git config pull.ff
true
- Đây là hành vi mặc định. Kéo được chuyển tiếp nhanh nếu có thể, nếu không, nó được hợp nhất.
git config pull.ff false
false
- Kéo không bao giờ được tua đi nhanh chóng và một hợp nhất luôn được tạo.
git config pull.ff only
only
- Kéo được tua đi nhanh nếu có thể, nếu không hoạt động bị hủy bỏ với thông báo lỗi.