bài viết trước, tôi đã giới thiệu cách undo change (quay lui thay đổi) các commit ở local repo. Trong bài viết này, tôi giới thiệu cách undo change ở staging area và working directory

1. Undo change in staging area

Trong một số trường hợp, sau khi đã chạy lệnh git add để đẩy file từ working directory vào staging area để chuẩn bị commit, chúng ta nghĩ lại và nhận ra có một số file cần được sửa thêm trước khi commit, do đó cần phải gỡ nó ra khỏi staging area.

Ví dụ, vẫn với repo tôi dùng ở bài viết trước, tôi tạo 2 file style.css và script.js và add vào staging, sau đó kiểm tra trạng thái repo:

$ touch style.css script.js
$ git add .
$ git status
2 file đã được thêm vào staging area
2 file đã được thêm vào staging area

Các bạn có thể thấy 2 file đều đã được thêm vào staging area

Giờ tôi kiểm tra lại và thấy file script.js còn một số lỗi cần sửa, tôi muốn đưa nó ra khỏi vùng staging area để quay về working directory. Tôi chạy lệnh sau:

$ git reset HEAD script.js

sau đó kiểm tra trạng thái repo bằng git status:

File script.js đã được đưa ra khỏi staging area
File script.js đã được đưa ra khỏi staging area

Các bạn có thể thấy file script.js đã được đưa ra khỏi staging area. Nếu chúng ta thực hiện lệnh git commit, sẽ chỉ có file style.css được commit vào local repo

2. Undo change in working directory

Nói một cách chính xác thì tôi sẽ undo change với những untracked files, tức là những file chưa được thêm vào staging area. Và với Git, undo untracked files đồng nghĩa với việc xoá sạch những file đó ra khỏi thư mục :v. Vì thế, hãy cân nhắc thật kĩ trước khi quyết định undo

Hiện tại repo của tôi đang có 1 untracked file là script.js. Tuy nhiên thì để cho chắc ăn, tôi sẽ xem Git sẽ undo (xoá) những file nào trong thư mục đi bằng lệnh sau:

$ git clean -n
git sẽ xoá file script.js đi
git sẽ xoá file script.js đi

Như vậy, khi undo (xoá) các untracked files ra khỏi thư mục, git sẽ xoá file script.js đi.

Sau khi đã thực sự chắc chắn rằng cần phải xoá file script.js đi, tôi sẽ chạy lệnh sau:

$ git clean -f

sau đó kiểm tra:

git đã xoá file script.js
git đã xoá file script.js

Lệnh git clean -f sẽ chỉ xoá các untracked files. Để xoá cả các untracked folders (thư mục), ta sẽ thêm option -d:

$ git clean -df
git clean -df xoá thư mục hello
git clean -df xoá thư mục hello

Như vậy, trong bài viết này tôi đã giới thiệu 2 lệnh để undo changes ở staging area và working directory:

- git reset HEAD <đường-dẫn-file>: Đưa file từ staging area về working directory

- git clean -f: Xoá các untracked files