Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Linux

Cách Sửa Lỗi Git 'Your Local Changes To The Following Files Will Be Overwritten By Merge'

Thông báo lỗi Your local changes to the following files will be overwritten by merge xuất hiện trong cơ chế kiểm soát phiên bản Git. Lỗi xảy ra khi bạn sửa file mà file đó cũng có thay đổi trên remote repository.

Cách Sửa Lỗi Git  Your Local Changes To The Following Files Will Be Overwritten By Merge

Lỗi này tránh được nếu không có file uncommitted cũng có thay đổi trên remote. Khi gặp lỗi, tốt nhất trao đổi với thành viên team. Dù muốn merge thay đổi local hay giữ phiên bản repo, hãy giữ tất cả mọi người đồng bộ.

Repository là gì? Push và Pull trong Git là gì?

Repository là kho lưu trữ mã nguồn liên tục được sửa đổi, lấy bởi thành viên qua GitHub. Pull kéo phiên bản mới nhất từ repo về local storage/IDE (Pycharm...). Sau Pull, sửa code, thêm tính năng. Xong thì Push lên repo lưu thay đổi, mọi người truy cập được.

Mới dùng GitHub, nên học cơ bản trước. Bài viết giả định bạn đã có kiến thức nền tảng.

Cách sửa 'Your local changes to the following files will be overwritten by merge'

Giải pháp tùy ý định. Có thể hủy thay đổi local pull từ repo, hoặc lưu local changes vào stash pull version repo. Tùy sở thích.

Khuyên tham khảo ý kiến team, đảm bảo cùng cùng trang trước khi tiến hành. Commit/sai push phiên bản sai ảnh hưởng cả team.

Phương pháp 1: Buộc pull ghi đè thay đổi local

Không quan tâm thay đổi local, muốn code từ repo: buộc pull. Ghi đè toàn bộ thay đổi local, bản sao repo xuất hiện.

Chạy lệnh trong IDE:

git reset --hard
git pull

Lệnh này hủy ngay lập tức mọi thay đổi local, chắc chắn bạn không cần chúng.

Phương pháp 2: Giữ cả hai thay đổi (local và repo)

Muốn giữ cả hai: add và commit thay đổi local. Khi pull sẽ có merge conflict. Dùng công cụ IDE (Difftool, mergetool) so sánh 2 đoạn code, quyết định giữ/xóa thay đổi. Cách trung gian: không mất thay đổi cho đến khi tự xóa.

git add $the_file_under_error
git commit
git pull

Khi conflict, dùng công cụ giải quyết conflict kiểm tra từng dòng.

Phương pháp 3: Giữ cả hai thay đổi KHÔNG commit

Thường gặp: developer chưa sẵn sàng commit do code chưa hoàn chỉnh (debug). Stash an toàn thay đổi, pull version repo, rồi unstash code.

git stash save --keep-index

hoặc

git stash
git pull
git stash pop

Nếu conflict sau pop stash, giải quyết theo cách thông thường. Có thể dùng:

git stash apply

thay pop nếu chưa muốn mất stash do conflict.

Nếu merge không phù hợp, cân nhắc rebase. Rebase: di chuyển/kết hợp chuỗi commit lên base commit mới. Trường hợp rebase, sửa lệnh:

git stash
git pull --rebase origin master
git stash pop

Phương pháp 4: Thay đổi 'cụ thể' các phần code

Muốn thay đổi phần cụ thể, không thay thế toàn bộ: commit phần không muốn ghi đè, làm theo phương pháp 3. Dùng lệnh sau cho phần muốn ghi đè từ version repo:

git checkout path/to/file/to/revert

hoặc

git checkout HEAD^ path/to/file/to/revert

Đảm bảo file không staged:

git reset HEAD path/to/file/to/revert

Sau đó pull:

git pull

Lệnh này cố gắng lấy version từ repo.