Danh sách bài viết trong series Học Git cơ bản: làm chủ quản lý mã nguồn
- Bài 1: Khởi Đầu Với Git – Cài Đặt Và Cấu Hình Cơ Bản
- Bài 2: Khám Phá Kho Lưu Trữ – Tạo Và Khởi Động Repository
- Bài 3: Git Commit – Lưu Lại Mọi Thay Đổi
- Bài 4: Git history – Xem Lịch Sử Và Undo
- Bài 5: Git branch – Làm Việc Với Branch
- Bài 6: Git Remote – Kết Nối Với GitHub
- Bài 7: Hợp Tác Trong Git – Resolve Conflict
Xem lại lịch sử và Phục hồi thay đổi trong Git
Sau khi đã biết cách lưu trữ các cột mốc bằng commit, chúng ta cần biết cách kiểm tra lại những gì đã thực hiện và cách xử lý khi có sai sót. Khả năng quay ngược thời gian chính là một trong những điểm mạnh nhất của Git mà chúng ta sẽ cùng khai thác trong bài này.
1. Kiểm tra lịch sử với Git Log
Để xem danh sách các commit đã thực hiện trong repository, chúng ta sử dụng lệnh cơ bản nhất:
git log
Kết quả sẽ hiển thị chi tiết mã hash của commit, tác giả, ngày tháng và thông điệp đi kèm. Trong đó, ký hiệu HEAD -> master cho biết chúng ta đang ở commit mới nhất của nhánh master.
Nếu danh sách quá dài và khó theo dõi, chúng ta có thể sử dụng tùy chọn rút gọn:
git log --oneline
Lệnh này giúp hiển thị mỗi commit trên một dòng duy nhất, rất hữu ích khi cần cái nhìn tổng quan về tiến độ dự án.
2. Kiểm tra phiên bản cũ (Checkout Commit)
Khi muốn xem lại mã nguồn tại một thời điểm cụ thể trong quá khứ, chúng ta có thể tạm thời chuyển trạng thái thư mục làm việc về commit đó.
-
Lấy mã hash: Sử dụng
git log --onelineđể tìm mã commit (ví dụ:ghi9012). -
Thực hiện chuyển đổi:
git checkout ghi9012
Lúc này, các file trong thư mục sẽ trở về trạng thái của commit đó. Tuy nhiên, chúng ta cần lưu ý rằng Git đang ở trạng thái detached HEAD (không nằm trên nhánh nào). Sau khi kiểm tra xong, chúng ta nên quay lại nhánh chính bằng lệnh:
git checkout master
3. Hủy bỏ thay đổi (Undo)
Trong quá trình làm việc, việc sai sót là khó tránh khỏi. Chúng ta có các cách sau để khôi phục:
-
Trường hợp chưa add (Unstaged): Nếu muốn hủy các thay đổi vừa sửa trên file nhưng chưa chạy
git add:git restore hello.txt -
Trường hợp đã add nhưng chưa commit (Staged): Đưa file ra khỏi vùng chờ trước khi hủy nội dung:
git restore --staged hello.txt git restore hello.txt -
Chỉnh sửa commit gần nhất: Nếu vừa commit xong nhưng phát hiện sai sót nhỏ hoặc quên chưa add một file, chúng ta sử dụng
amendđể cập nhật trực tiếp vào commit đó:git add hello.txt git commit --amend -m "Nội dung message mới"
4. Sử dụng Reset để quay về quá khứ
Nếu muốn hủy bỏ hoàn toàn một hoặc nhiều commit gần đây để quay về một mốc cụ thể, chúng ta sử dụng lệnh reset.
- Hard Reset: Xóa bỏ mọi thay đổi sau mốc commit chỉ định:
git reset --hard <mã-commit> - Soft Reset: Quay về mốc cũ nhưng vẫn giữ lại các thay đổi trong Staging Area để chúng ta có thể commit lại.
Lưu ý: Lệnh reset --hard sẽ làm mất dữ liệu vĩnh viễn nếu chưa được backup, vì vậy chúng ta cần cân nhắc kỹ trước khi thực hiện.
Một số kinh nghiệm thực tế
- Sử dụng Reflog: Nếu lỡ tay
resetnhầm, chúng ta có thể dùnggit reflogđể tìm lại mã hash của các commit đã bị ẩn đi. - Luôn kiểm tra trạng thái: Trước khi thực hiện các lệnh undo hay reset, hãy chạy
git statusvàgit logđể xác định chính xác vị trí đang đứng. - Thực hành an toàn: Đối với các thay đổi lớn, chúng ta nên commit hoặc sao lưu file trước khi thử nghiệm các lệnh can thiệp sâu vào lịch sử.
Bài tập thực hành nhỏ
Bạn hãy thử thêm một dòng văn bản bất kỳ vào hello.txt, thực hiện commit, sau đó sử dụng git reset --hard để quay lại trạng thái trước đó. Việc tự mình thực hiện thao tác này sẽ giúp chúng ta tự tin hơn khi xử lý các tình huống thực tế.
Trong bài tiếp theo, chúng ta sẽ cùng khám phá về Branch (Nhánh), một trong những tính năng mạnh mẽ nhất giúp quản lý nhiều luồng công việc song song trong Git.







