Trong khi lập trình, chắc chắn bạn sẽ không thể tránh khỏi những sự cố như xoá nhầm file, commit sai hoặc thậm chí là làm mất mã nguồn của một phần dự án.
Đừng lo lắng, trong bài viết này, mình sẽ hướng dẫn bạn sử dụng các câu lệnh Git để khôi phục mã nguồn về trạng thái ban đầu.
Git là gì? Tại sao lập trình viên nào cũng cần PHẢI biết!
1. Git Restore
Trước tiên, chúng ta sẽ cùng nhau tìm hiểu câu lệnh git restore
.
Giả sử, bạn vô tình sửa đổi file index.html
và muốn quay lại trạng thái trước khi chỉnh sửa, bạn có thể sử dụng lệnh:
git restore index.html
Lệnh git restore
được sử dụng để khôi phục file index.html
về trạng thái tại commit gần nhất của nhánh hiện tại.
![Lệnh git restore](https://letdiv.com/wp-content/uploads/2024/07/lenh-git-restore.webp)
Tuy nhiên, bạn cần lưu ý là lệnh git restore
chỉ khôi phục file index.html
tại khu vực Working Directory và không có tạo thêm hoặc xoá đi bất kỳ commit nào khác.
Miễn Phí: Đột Phá Nền Tảng Git Từ Con Số 0
Bên cạnh đó, nếu bạn muốn khôi phục file index.html
về trạng thái tại một commit cụ thể do bạn tự chỉ định, thì bạn có thể sử dụng lệnh git restore
với tuỳ chọn --source
để chỉ định mã hash của commit:
git restore --source=<mã hash của commit> index.html
Trong trường hợp khác, nếu bạn thêm file index.html
vào khu vực Staging, nhưng sau đó đổi ý và muốn xoá nó khỏi khu vực Staging.
Bạn có thể sử dụng lệnh git restore
với tuỳ chọn --staged
, theo sau là tên file mà bạn muốn xoá khỏi khu vực Staging:
git restore --staged index.html
2. Git Reset
Tiếp theo, chúng ta hãy cùng nhau tìm hiểu lệnh git reset
.
Lệnh git reset
giúp bạn khôi phục mã nguồn quay về trạng thái của commit được chỉ định.
Ví dụ, bạn đang ở nhánh chuc-nang-1
và bạn đã thực hiện 4 commit trên nhánh này.
Bạn muốn quay lại commit B và loại bỏ các sự thay đổi trong commit C và D, bạn có thể sử dụng lệnh git reset
theo sau là mã hash của commit B:
git reset <mã hash của B>
Lúc này, con trỏ HEAD
và nhánh chuc-nang-1
sẽ trỏ về commit B. Tuy nhiên, các sự thay đổi trong commit C và D không toàn toàn bị mất đi mà vẫn được bảo tồn tại khu vực Working Directory.
![Lệnh git reset](https://letdiv.com/wp-content/uploads/2024/07/lenh-git-reset.webp)
Trong trường hợp nếu bạn không muốn bảo tồn các sự thay đổi trong commit C và D của khu vực Working Directory thì bạn có thể sử dụng thêm tuỳ chọn --hard
cho lệnh git reset
:
git reset --hard <mã hash của B>
Tuy nhiên, bạn hãy cẩn thận khi sử dụng tuỳ chọn này, tại vì những thay đổi trong commit C và D sẽ bị xoá vĩnh viễn và không thể khôi phục lại được.
3. Git Revert
Cuối cùng là lệnh git revert
.
Lệnh git revert
có chức năng khá tương đồng với lệnh git reset
, là giúp bạn khôi phục mã nguồn quay lại trạng thái của commit được chỉ định.
Tuy nhiên, có một sự khác biệt quan trọng giữa lệnh git revert
và lệnh git reset
mà bạn cần lưu ý:
Lệnh git revert
tạo ra một commit mới để đảo ngược các sự thay đổi:
![Lệnh git revert](https://letdiv.com/wp-content/uploads/2024/07/lenh-git-revert.webp)
Trong khi lệnh git reset
thì di chuyển con trỏ HEAD
và nhánh hiện tại, điều này có thể làm thay đổi lịch sử commit.
4. Khi nào nên sử dụng lệnh git revert và git reset?
Nếu bạn muốn khôi phục một commit đã được đẩy lên GitHub, bạn nên sử dụng lệnh git revert
để tránh bị xung đột với những thành viên khác trong nhóm.
Tại vì lệnh git revert
không làm thay đổi lịch sử commit trước đó.
Còn nếu bạn muốn khôi phục một commit chưa được đẩy lên GitHub, bạn có thể sử dụng lệnh git reset
.
5. Miễn Phí: Học Git Bài Bản Từ Con Số 0
Việc thành thạo các câu lệnh GIT sẽ giúp bạn tiết kiệm thời gian rất nhiều khi làm việc trong các dự án thực tế.
Nếu bạn muốn có một hệ thống kiến thức GIT bài bản từ con số 0, bạn có thể bắt đầu ngay hoàn toàn miễn phí với khoá học GIT của LetDiv nhé!