Mục Lục
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
, 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).main
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ụnggit stash
để lưu tạm thời các thay đổi trước khi reset.
Xin chào,
Bài viết này sử dụng AI ChatGPT để viết sau đó được lựa chọn, biên tập lại nội dung, chỉ một phần nhỏ các bài là tôi tự viết. Nội dung thể hiện ý chí cá nhân về các vấn đề, giải pháp. Tôi lưu tại website này để học, tra cứu và chia sẻ.
Tôi là Minh, sống tại Hà Nội, kỹ sư phần mềm với hơn 20 năm kinh nghiệm. Các ngôn ngữ yêu thích của tôi là Swift, Objective-C, Java, Kotlin, .NET, HTML, JavaScript, CSS, Bootstrap, jQuery, AngularJS, Angular…
Các bạn có thể tải app của tôi trên App Store hoặc Google Play:
QuestionBank-Ôn thi vào 10: phiên bản iOS, phiên bản Android
TypingTest by QuestionBank: phiên bản iOS, phiên bản Android
Xin cảm ơn,
Minh