Lệnh git pull lấy thay đổi từ kho từ xa về máy cục bộ. Thao tác này có thể hoàn tác bằng lệnh git reset, đưa kho về điểm trước trong lịch sử.
Hướng dẫn này trình bày cách dùng git reset để hoàn tác git pull, kèm ví dụ minh họa.
Phân tích Git Pull
Lệnh git pull đồng bộ kho cục bộ với kho từ xa. Khi chạy, Git kiểm tra thay đổi trên kho từ xa bằng git fetch, lấy metadata các thay đổi, sau đó chạy git merge để hợp nhất thay đổi vào máy cục bộ. Kết quả: kho cục bộ giống hệt kho từ xa.
Hoàn tác Git Pull
Không có lệnh chuyên biệt hoàn tác git pull. Giải pháp là dùng git reset để đưa kho về commit trước đó.
Ví dụ: làm việc trên dự án ck-git. Đồng nghiệp push commit lên GitHub. Ta pull thay đổi:
git pull
Kết quả cho thấy file README.md có thêm một dòng. Giả sử ta không muốn chấp nhận thay đổi này, cần hoàn tác bằng git reset.
Lưu ý: git reset sẽ xóa mọi thay đổi chưa commit. Hãy commit những gì muốn giữ trước khi reset.
Chạy reset về trạng thái commit cuối cùng:
git reset 77e7fc0 --hard
Cờ --hard thay đổi thư mục làm việc theo nội dung code tại commit chỉ định. Kết quả:
Unstaged changes after reset: M README.md
Hoặc dùng HEAD để chỉ định commit cần quay về:
git reset HEAD~1 --hard
Lệnh này quay lại 1 commit trước. Thay số 1 để quay xa hơn. File README.md giờ ở trạng thái commit cuối. Các thay đổi chưa commit trước khi pull sẽ mất vĩnh viễn vì Git chỉ lưu thay đổi đã commit.
Kết luận
Dùng git reset để hoàn tác git pull. Lệnh đưa kho về điểm cụ thể trong lịch sử. Mọi thay đổi chưa commit trước khi pull sẽ mất. Hãy commit trước khi reset.