Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Lỗi: Untracked working tree files would be overwritten by merge

Lỗi trên thường xảy ra khi không clone kho đang cố pull. Dự án có thể giống hệt, nhưng đang làm local mà pull từ repo GitHub vì nó có file/tính năng muốn đưa vào local.

Có vài cách khắc phục.

Cho nhánh local theo dõi nhánh remote

Dùng lệnh:

git branch --track <tên-nhánh> origin/<tên-nhánh>

Nhánh remote thành đối ứng với server. Sau đó git status xem khác biệt 2 repo.

Staging và Stashing

Để pull mà không ghi đè file local, stage rồi stash:

git add -A
git stash
git pull

git add -A stage tất cả thay đổi. Giống git add (xem tất cả working tree, add path working tree, file thay đổi/mới/không ignored) cộng với git add -u (xem file đã track, stage thay đổi nếu file bị xóa hoặc khác).

git stash lấy thay đổi staged/unstaged chưa commit, giấu để dùng sau, revert khỏi working copy. Sau đó tự do pull file mới.

Fetching và Resetting

Nếu 2 cách trên thất bại, thử fetch và reset. Vì dùng --hard (nguy hiểm, xóa tất cả thay đổi chưa commit), hãy thử 2 cách trước trước.

Chạy git status trước để chắc output rỗng.

git fetch --all
git reset --hard origin/<tên-nhánh>

git fetch --all fetch tất cả nhánh remote. Fetch cập nhật bản sao local của nhánh remote, nhưng không cập nhật nhánh local track remote. Cần git pull --all để đạt được điều đó.

git reset --hard origin/<tên-nhánh> = "xóa hết nhánh local, làm giống nhánh remote". Xóa staged và unstaged changes.

Kết luận

Lỗi "untracked working tree files would be overwritten by merge" xảy ra khi pull nhánh remote đang ở nhánh local. Dự án có thể giống nhau, nhưng local phải track remote mới pull thành công.

Thường xảy ra khi developer quên clone repo. Cách khắc phục khác: stage+stash hoặc fetch+reset (chỉ thử nếu 2 cách trước thất bại).