Hoàn tác thay đổi
Tổng quan
Git cung cấp nhiều cách để hoàn tác thay đổi, tùy thuộc vào thay đổi đang ở đâu:
- Working Directory (chưa add)
- Staging Area (đã add, chưa commit)
- Repository (đã commit)
Hoàn tác ở Working Directory
Hủy thay đổi file (chưa add)
# Hủy thay đổi một file
git checkout -- filename.txt
# Hoặc (Git 2.23+)
git restore filename.txt
# Hủy tất cả thay đổi
git restore .Xóa file mới tạo (untracked)
# Xem file sẽ bị xóa
git clean -n
# Xóa file
git clean -f
# Xóa cả thư mục
git clean -fdHoàn tác ở Staging Area
Unstage file (đã add, chưa commit)
# Unstage một file
git reset HEAD filename.txt
# Hoặc (Git 2.23+)
git restore --staged filename.txt
# Unstage tất cả
git reset HEADHoàn tác Commit
Sửa commit cuối
# Sửa message
git commit --amend -m "message mới"
# Thêm file vào commit cuối
git add forgotten-file.txt
git commit --amend --no-editRevert - Tạo commit ngược lại
Tạo commit mới hoàn tác commit cũ (an toàn cho public branch):
# Revert commit gần nhất
git revert HEAD
# Revert commit cụ thể
git revert abc123
# Revert nhiều commits
git revert HEAD~3..HEADReset - Quay về commit cũ
# Soft: giữ thay đổi trong staging
git reset --soft HEAD~1
# Mixed (mặc định): giữ thay đổi trong working directory
git reset HEAD~1
# Hard: xóa hoàn toàn thay đổi ⚠️
git reset --hard HEAD~1⚠️ Cảnh báo:
reset --hardsẽ XÓA VĨNH VIỄN các thay đổi. Chỉ dùng khi bạn chắc chắn!
So sánh các lệnh
| Tình huống | Lệnh |
|---|---|
| Hủy thay đổi chưa add | git restore file |
| Unstage file đã add | git restore --staged file |
| Sửa commit cuối | git commit --amend |
| Hoàn tác commit (an toàn) | git revert |
| Xóa commit (nguy hiểm) | git reset --hard |
Khôi phục từ Reflog
Nếu lỡ reset —hard, có thể khôi phục qua reflog:
# Xem lịch sử HEAD
git reflog
# Khôi phục về commit cũ
git reset --hard HEAD@{2}Stash - Lưu tạm thay đổi
Lưu thay đổi để làm việc khác, sau đó khôi phục:
# Lưu thay đổi
git stash
# Xem danh sách stash
git stash list
# Khôi phục stash gần nhất
git stash pop
# Khôi phục stash cụ thể
git stash apply stash@{1}
# Xóa stash
git stash drop stash@{0}Tổng kết
Bạn đã học xong các kiến thức Git cơ bản! Hãy tiếp tục với phần GitHub để học cách làm việc với remote repository.
Last updated on