1. Lỗi Not possible to fast-forward, aborting.
shell> git pull origin main
From https://git.hoanghd.vn/common-scripts/netbox-agent
* branch main -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
Lỗi này xảy ra vì bạn có thay đổi cục bộ trên các file README.md
và roles/lshw/vars/main.yml
mà chưa được commit hoặc stash. Git không cho phép bạn pull các thay đổi mới từ remote nếu điều này có thể gây mất mát các thay đổi cục bộ của bạn. Để giải quyết lỗi này, bạn có thể làm theo một trong các cách sau:
Commit các thay đổi cục bộ:
Nếu bạn muốn giữ lại các thay đổi của mình, hãy commit chúng trước khi pull.
git add .
git commit -m "Lưu lại các thay đổi trước khi pull"
Stash các thay đổi cục bộ:
Nếu bạn chưa muốn commit các thay đổi của mình và muốn giữ chúng để làm việc sau, bạn có thể sử dụng stash.
git stash push -m "Lưu tạm thay đổi trước khi pull"
git pull origin main
git stash pop
Lệnh này sẽ lưu tạm thời các thay đổi của bạn, cho phép bạn pull từ remote, sau đó áp dụng lại các thay đổi đã lưu.
Loại bỏ các thay đổi cục bộ:
Nếu bạn không muốn giữ lại các thay đổi cục bộ, bạn có thể loại bỏ chúng.
git checkout -- README.md roles/lshw/vars/main.yml
Lưu ý: Lệnh này sẽ loại bỏ mọi thay đổi chưa commit trên các file đó, vì vậy hãy cẩn thận khi sử dụng.
2. Need to specify how to reconcile divergent branches.
shell> git pull origin main
From https://git.hoanghd.vn/common-scripts/netbox-agent
* branch main -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge (the default strategy)
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
Lỗi này thông báo rằng bạn có các nhánh phân kỳ và cần chỉ định cách để hợp nhất chúng trước khi thực hiện lệnh git pull
. Bạn có ba lựa chọn để xử lý tình huống này:
Merge (Chiến lược mặc định): Sử dụng merge để hợp nhất các thay đổi từ nhánh remote vào nhánh hiện tại của bạn. Điều này sẽ tạo ra một commit merge nếu có bất kỳ xung đột nào giữa các nhánh.
git config pull.rebase false
Rebase: Áp dụng lại các commit của nhánh hiện tại lên đầu nhánh được pull về. Điều này giúp lịch sử commit của bạn gọn gàng hơn bằng cách đặt các commit của bạn lên trên cùng của lịch sử commit từ nhánh remote.
git config pull.rebase true
Fast-forward only: Chỉ cho phép pull nếu có thể thực hiện thông qua fast-forward. Điều này đảm bảo rằng nhánh của bạn sẽ không bị phân kỳ so với nhánh remote.
git config pull.ff only
Bạn cũng có thể áp dụng một trong những cấu hình này cho tất cả các kho lưu trữ bằng cách thêm --global
vào lệnh, ví dụ:
git config --global pull.rebase false
Sau khi cấu hình, bạn có thể thử git pull
lại mà không gặp lỗi. Lựa chọn phù hợp phụ thuộc vào cách bạn muốn quản lý lịch sử commit của mình.
3. Lỗi Not possible to fast-forward, aborting.
shell> git pull origin main
From https://git.hoanghd.vn/common-scripts/netbox-agent
* branch main -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
Lỗi “fatal: Not possible to fast-forward, aborting.” xảy ra khi bạn cố gắng thực hiện một pull với chính sách fast-forward (--ff-only
), nhưng Git không thể thực hiện được vì có những thay đổi trên cả hai nhánh (local và remote) mà không thể hợp nhất mà không tạo ra một commit merge mới. Điều này thường xảy ra khi có sự phân kỳ giữa nhánh local và nhánh remote.
Để giải quyết vấn đề này, bạn có một số lựa chọn:
Sử dụng Merge.
Thực hiện một merge để hợp nhất các thay đổi từ nhánh remote vào nhánh local của bạn. Điều này sẽ tạo ra một commit merge nếu cần.
git merge origin/main
Sử dụng Rebase.
Rebase các commit của bạn lên đầu nhánh remote. Điều này sẽ giữ cho lịch sử commit của bạn gọn gàng hơn bằng cách đặt các commit của bạn lên trên cùng của lịch sử commit từ nhánh remote.
git pull --rebase origin main
Lưu ý: Rebase có thể làm thay đổi lịch sử commit và nên được sử dụng cẩn thận, đặc biệt là trên các nhánh được chia sẻ với người khác.
Đặt lại Nhánh Local của Bạn.
Nếu bạn không cần giữ lại các thay đổi local và chỉ muốn nhánh local của bạn phản ánh nhánh remote, bạn có thể sử dụng git reset
để đặt lại nhánh local của mình theo nhánh remote.
git fetch origin
git reset --hard origin/main
Lưu ý: Lệnh này sẽ loại bỏ tất cả các thay đổi chưa commit trên nhánh local của bạn và nên được sử dụng với sự cẩn trọng.
Bây giờ bạn có thể sử dụng lại lệnh git pull origin main
để xem kết quả nhé.