Bài 4: Git history – Xem Lịch Sử Và Undo

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 đó.

  1. Lấy mã hash: Sử dụng git log --oneline để tìm mã commit (ví dụ: ghi9012).

  2. 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 reset nhầm, chúng ta có thể dùng git 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 statusgit 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.

Điều hướng chuỗi bài viết<< Bài 3: Git Commit – Lưu Lại Mọi Thay Đổi>> Bài 5: Git branch – Làm Việc Với Branch

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia