MN
KHÁM PHÁ VÀ TRẢI NGHIỆM CÁ NHÂN
MN

1. Chức năng của lệnh Git Reset

Lệnh git reset trong Git là một công cụ mạnh mẽ dùng để thay đổi trạng thái của HEAD, nhánh hiện tại và trạng thái của các file trong working directory và staging area. Tùy thuộc vào các tùy chọn sử dụng, git reset có thể hoàn tác các thay đổi cục bộ, di chuyển con trỏ HEAD về commit trước đó, hoặc loại bỏ các thay đổi trong staging area.

2. Các tình huống sử dụng Git Reset

Lệnh git reset được sử dụng trong nhiều tình huống khác nhau để thay đổi trạng thái của lịch sử commit, staging area và working directory. Dưới đây là các tình huống phổ biến khi sử dụng lệnh này:

2.1. Undo commit nhưng giữ nguyên thay đổi (sử dụng --soft)

Tình huống: Bạn vừa commit một loạt thay đổi nhưng nhận ra có lỗi hoặc cần chỉnh sửa nội dung commit đó. Bạn muốn giữ nguyên thay đổi nhưng không muốn commit lại lần nữa ngay lập tức.

Cách sử dụng:

git reset --soft HEAD~1

Mô tả: Lệnh này sẽ di chuyển con trỏ HEAD về commit trước đó, nhưng các thay đổi trong working directory và staging area vẫn được giữ nguyên. Sau đó, bạn có thể sửa lại commit và thực hiện lại git commit.

2.2. Unstage file mà không thay đổi working directory (sử dụng --mixed)

Tình huống: Bạn đã sử dụng git add để đưa các thay đổi vào staging area nhưng nhận ra rằng bạn chưa sẵn sàng để commit hoặc cần điều chỉnh một vài file. Bạn chỉ muốn unstage các file mà không làm mất thay đổi trong working directory.

Cách sử dụng:

git reset --mixed HEAD

Mô tả: Lệnh này sẽ unstage các thay đổi (đưa chúng ra khỏi staging area) nhưng giữ nguyên nội dung trong working directory. Bạn có thể chỉnh sửa lại file và thêm lại các thay đổi khi cần.

2.3. Quay lại trạng thái cũ và xóa tất cả thay đổi (sử dụng --hard)

Tình huống: Bạn đã thử nghiệm một số thay đổi nhưng nhận thấy không cần thiết và muốn quay lại trạng thái trước đó, loại bỏ hoàn toàn các thay đổi chưa được commit.

Cách sử dụng:

git reset --hard HEAD~1

Mô tả: Lệnh này sẽ xóa tất cả các thay đổi trong cả working directory và staging area, và quay lại trạng thái của commit trước đó. Lưu ý: Sử dụng lệnh này sẽ mất hoàn toàn các thay đổi nếu chưa được commit.

2.4. Quay lại commit cũ và tiếp tục làm việc từ đó (sử dụng --mixed)

Tình huống: Bạn nhận ra rằng một loạt các commit gần đây có lỗi, và bạn muốn quay lại một commit trước đó để sửa chữa mà không mất các thay đổi trong working directory.

Cách sử dụng:

git reset --mixed <commit-hash>

Mô tả: Lệnh này sẽ đưa HEAD về một commit cũ (xác định bởi hash), nhưng vẫn giữ các thay đổi trong working directory để bạn có thể tiếp tục chỉnh sửa hoặc commit lại.

2.5. Reset các thay đổi trước khi commit (sử dụng --mixed)

Tình huống: Bạn đã thêm các thay đổi bằng git add và chuẩn bị commit, nhưng sau đó nhận ra rằng không muốn giữ lại chúng trong staging area mà chỉ giữ nguyên trong working directory.

Cách sử dụng:

git reset --mixed

Mô tả: Lệnh này sẽ xóa các file đã staged nhưng vẫn giữ các thay đổi trong working directory để bạn có thể thực hiện lại quá trình staging.

2.6. Quay lại commit cũ và bắt đầu lại từ đó (sử dụng --hard)

Tình huống: Bạn đang phát triển trên một nhánh, nhưng mọi thứ đi không đúng hướng và bạn muốn quay lại một commit cũ để bắt đầu lại mà không giữ bất kỳ thay đổi nào từ commit hiện tại.

Cách sử dụng:

git reset --hard <commit-hash>

Mô tả: Lệnh này sẽ xóa toàn bộ thay đổi và đưa trạng thái working directory và staging area quay lại hoàn toàn như commit cũ. Hữu ích khi bạn muốn khởi động lại mà không cần lưu giữ bất kỳ thay đổi nào từ sau commit đó.

2.7. Reset lại một file cụ thể trong staging area

Tình huống: Bạn chỉ muốn unstage một hoặc một vài file cụ thể mà không ảnh hưởng đến các file khác trong staging area.

Cách sử dụng:

git reset <file>

Mô tả: Lệnh này sẽ chỉ unstage file được chỉ định mà không làm thay đổi nội dung file trong working directory. Các file khác trong staging area không bị ảnh hưởng.

2.8. Reset trạng thái các file bị thay đổi nhưng không commit

Tình huống: Bạn đã thực hiện nhiều thay đổi nhưng không muốn giữ lại chúng và muốn trả lại trạng thái ban đầu (commit gần nhất).

Cách sử dụng:

git reset --hard

Mô tả: Lệnh này sẽ loại bỏ tất cả các thay đổi trong working directory và staging area, trả lại trạng thái như commit cuối cùng.

2.9. Reset về trạng thái của một commit trên nhánh khác

Tình huống: Bạn đang làm việc trên một nhánh và muốn đưa trạng thái của nhánh đó về một commit từ nhánh khác (ví dụ như main).

Cách sử dụng:

git reset --hard main

Mô tả: Lệnh này sẽ làm cho nhánh hiện tại có trạng thái giống như commit cuối cùng trên nhánh main, xóa bỏ toàn bộ các thay đổi trên nhánh hiện tại (trong cả working directory và staging area).

3. Lưu ý:

  • Sử dụng git reset --hard có thể làm mất hoàn toàn các thay đổi nếu chúng chưa được commit. Cần thận trọng khi sử dụng.
  • Nếu bạn không chắc chắn về việc sử dụng git reset, bạn có thể xem xét sử dụng git stash để lưu tạm thời các thay đổi trước khi reset.