LogoDuyệtSr. Data Engineer
HomeAboutPhotosInsightsCV

Footer

Logo

Resources

  • Rust Tiếng Việt
  • /archives
  • /series
  • /tags
  • Status

me@duyet.net

  • About
  • LinkedIn
  • Resume
  • Projects

© 2026 duyet.net | Sr. Data Engineer | 2026-02-27

Git - Phục hồi code cũ

Note: This post is over 12 years old. The information may be outdated.

Git là một công cụ mạnh mẽ để quản lý dự án, hiện đang được sử dụng rộng rãi. Đôi khi, bạn có thể cần khôi phục mã nguồn sau khi thực hiện sai lầm, code không chính xác, hoặc gặp phải nhiều tình huống khác. Dưới đây là một số trường hợp cụ thể mà bạn có thể gặp phải và cách xử lý:

Git Logo

1. Khi chỉnh sửa mã nguồn nhưng chưa thêm vào stage

Nếu bạn đã chỉnh sửa mã nguồn nhưng chưa thêm vào stage, bạn có thể sử dụng các lệnh sau để khôi phục lại trạng thái ban đầu:

$ git clean -df
$ git checkout -- .

⚠️ Lưu ý: git clean -df sẽ xóa tất cả các file chưa được theo dõi (untracked files) và thư mục. Hãy kiểm tra kỹ trước khi thực hiện bằng lệnh git clean -dn (dry-run) để xem những file nào sẽ bị xóa.

2. Khi đã thêm vào stage nhưng chưa commit

Nếu bạn đã thêm các thay đổi vào stage nhưng chưa commit, bạn có thể sử dụng lệnh sau để đưa các thay đổi ra khỏi stage và dọn dẹp thư mục làm việc:

$ git reset HEAD
$ git clean -df

3. Khi đã commit nhưng chưa push

Nếu bạn đã commit nhưng chưa push, bạn có thể sử dụng lệnh sau để hoàn tác commit:

$ git reset HEAD~1 --hard

⚠️ Cảnh báo: Lệnh git reset --hard sẽ xóa vĩnh viễn các thay đổi. Hãy chắc chắn bạn không cần những thay đổi này nữa trước khi thực hiện. Nếu chỉ muốn giữ lại các thay đổi, sử dụng git reset HEAD~1 --soft hoặc git reset HEAD~1 (mixed mode).

4. Khi đã commit và đã push

Trong trường hợp bạn đã commit và push, nếu mã nguồn đã được người khác fetch và sử dụng, việc thu hồi thay đổi không đơn giản. Tuy nhiên, bạn có thể tạo một commit mới đảo ngược những thay đổi đã push bằng lệnh:

$ git revert HEAD~1..HEAD

Sử dụng các lệnh trên giúp bạn xử lý hiệu quả các tình huống khôi phục mã nguồn trong Git, đảm bảo quy trình làm việc mượt mà và tránh những sai lầm không đáng có.


📝 Cập nhật 2025: Từ Git phiên bản 2.23 trở đi, Git đã giới thiệu các lệnh mới dễ hiểu hơn:

  • git restore <file> - Thay thế cho git checkout -- <file> (khôi phục file)
  • git restore --staged <file> - Thay thế cho git reset HEAD <file> (bỏ file ra khỏi staging area)
  • git switch <branch> - Thay thế cho git checkout <branch> (chuyển branch)

Các lệnh cũ vẫn hoạt động, nhưng các lệnh mới được khuyến nghị sử dụng vì rõ ràng và dễ hiểu hơn.

Jan 25, 2015·11 years ago
|Git|
TutorialGit
|Edit|

Related Posts

Git - 19 Tips For Everyday Git Use

I’ve been using git full time for the past 4 years, and I wanted to share the most practical tips that I’ve learned along the way. Hopefully, it will be useful to somebody out there

Sep 16, 2015·10 years ago
Read more

Git rebase, gộp commits bằng rebase

Trong dự án, code của bạn luôn có sự thay đổi, sau khi push 1 đống commit lên github. Một ngày kia ông Leader kêu lại: "Ê mày, sửa chỗ này, sửa chỗ kia, code không đúng chuẩn rồi, bla bla ...". Thế là phải hồi hì hục cải tiến code, coding style cho "chuẩn".

Aug 25, 2015·11 years ago
Read more

Git - Cách xóa nhanh tất cả các branch cũ đã merge vào branch master

Nếu bạn có rất nhiều branch trên repo, mỗi branch phát triển 1 chức năng của dự án. Trong số chúng có nhiều branch đã hoàn thành, và đã được merge vào branch chính (master) chẳng hạn, mình gọi các branch này là branch cũ.

Aug 25, 2015·11 years ago
Read more

Git - Cách xem nội dung 1 file ở branch khác

Nếu bạn đang ở 1 nhánh, và bạn muốn xem nội dung của 1 file nằm ở trên nhánh khác mà không cần phải checkout.

Aug 25, 2015·11 years ago
Read more
On this page
  • 1. Khi chỉnh sửa mã nguồn nhưng chưa thêm vào stage
  • 2. Khi đã thêm vào stage nhưng chưa commit
  • 3. Khi đã commit nhưng chưa push
  • 4. Khi đã commit và đã push
On this page
  • 1. Khi chỉnh sửa mã nguồn nhưng chưa thêm vào stage
  • 2. Khi đã thêm vào stage nhưng chưa commit
  • 3. Khi đã commit nhưng chưa push
  • 4. Khi đã commit và đã push