Chào các bạn đến với bài viết tiếp theo trong series này! Series này tên “Thao tác cơ bản với Git” nhưng đến bài viết này thì mình thấy “không cơ bản cho lắm” =))) Bài viết này mình sẽ tìm hiểu về Git Stash – đây là một thuật ngữ khó xa lạ với nhiều người, nhưng nó sẽ hữu dụng trong nhiều trường hợp. Cùng mình tìm hiểu nhé!!!
Bạn là một coder và bạn đang code thì leader tên S*** báo “code của chú ở pr trước đang có bug production, quay lại fix cho anh luôn nhé!” Sau khi nhận “gáo nước lạnh từ leader bạn đang ở giữa chừng task mới và có khá nhiều files changed. Bạn ngồi vạch hướng giải quyết Để bắt đầu giải quyết vấn đề, bạn cần một branch mới với code trên production. Khi nói đến lệnh Git cơ bản, bạn có hai lựa chọn:
- Chạy
git reset --hard
để loại bỏ những thay đổi đã được commit của bạn. - Ghi lại công việc chưa hoàn tất của bạn như là một commit mới.
Tùy chọn đầu tiên làm mất tất cả công việc của bạn, trong khi cái sau dẫn đến một phần commit không có ý nghĩa. Không có tình huống là được mong đợi cả.
Đây là lúc lệnh git stash
phát huy tác dụng của nó. Hãy tưởng tượng nó giống như git reset --hard
, nó cung cấp cho bạn một branch sạch sẽ, nhưng nó cũng ghi lại các thay đổi không đầy đủ bên trong. Sau khi khắc phục xong lỗi nghiêm trọng, bạn có thể tái áp dụng những thay đổi này và bắt đầu lại từ nơi bạn đang dở dang. Bạn có thể xem git stash
như một nút “tạm dừng” cho tiến trình công việc của bạn.
Tôi cá chắc rằng nếu bạn đã từng nghịch với github thì kiểu gì bạn chả gõ vài lần git stash và git stash pop rồi. Nó là một tính năng rất hữu ích của git. Nhưng như thế thì chưa tường minh lắm, tôi cũng nghịch như bạn nhưng hỏi sao có mỗi thế kia thì cũng chưa bõ bèn gì cho lắm! nên một buổi tối rảnh quá của một ông coder FA, tôi bỏ ra ngồi đọc về thằng git stash này! bạn nào biết rồi xin bỏ qua cho thảo dân mới tìm hiểu này nhé!
Dưới đây là tất tần tật câu lệnh Git Stash mà tôi thó được:
- Git stash
- Git stash list
- Git stash pop
- Git stash apply
- Git stash drop
- Git stash clear
- Git stash save “masage”
- Git stash branch <new-brand>
Bắt đầu đi vào từng cái một nhé 😎
1. Git stash
- Chức năng: Lưu trữ tất cả các thay đổi chưa commit vào một stash mới.
- Ví dụ: Bạn đang làm dở một tính năng mới, nhưng muốn chuyển sang sửa một lỗi khẩn cấp. Bạn thực hiện:
$ git stash
Tất cả các thay đổi của bạn sẽ được lưu tạm, và working directory sẽ trở về trạng thái của commit cuối cùng.
2. Git stash list
- Chức năng: Hiển thị danh sách các stash đã lưu.
- Ví dụ: Bạn đang làm dở một tính năng mới, nhưng muốn chuyển sang sửa một lỗi khẩn cấp. Bạn thực hiện:
$ git stash list
Kết quả sẽ hiển thị các stash dưới dạng một danh sách, mỗi stash có một ID duy nhất.
3. Git stash pop
- Chức năng: Áp dụng lại stash trên cùng và xóa nó khỏi danh sách.
- Ví dụ: Sau khi sửa lỗi xong, bạn muốn khôi phục lại những thay đổi đã lưu trước đó:
$ git stash pop
Stash trên cùng sẽ được áp dụng vào working directory, và sau đó bị xóa khỏi danh sách stash.
4. Git stash apply
- Chức năng: Áp dụng lại stash nhưng không xóa nó khỏi danh sách.
- Ví dụ: Bạn muốn thử áp dụng một stash để xem kết quả, nhưng chưa muốn xóa nó:
$ git stash apply
Stash sẽ được áp dụng, nhưng vẫn còn trong danh sách stash.
5. Git stash drop
- Chức năng: Xoá stash trên cùng.
- Ví dụ: Bạn thấy rằng stash trên cùng không cần thiết nữa:
$ git stash drop
Stash trên cùng sẽ bị xóa khỏi danh sách.
6. Git stash clear
- Chức năng: Xoá tất cả các stash.
- Ví dụ: Bạn muốn xóa sạch tất cả các stash đã lưu:
$ git stash clear
2 lệnh sau đây sẽ nâng cao hơn một chút 😎
7. Git stash save “massage”
- Chức năng: Lưu stash với một thông điệp mô tả.
- Ví dụ:
$ git stash save "em dang code do!"
Điều này giúp bạn dễ dàng theo dõi mục đích của từng stash.
8. Git stash branch <new-branch>
- Chức năng: Tạo một nhánh mới từ stash hiện tại.
- Ví dụ:
$ git stash branch feature/new-feature
Một nhánh mới có tênfeature/new-feature
sẽ được tạo, và các thay đổi trong stash sẽ được áp dụng vào nhánh này.
Ví dụ thực tế chi tiết hơn nhé 😎
Giả sử bạn đang phát triển một ứng dụng web. Bạn đã thực hiện một số thay đổi trên giao diện người dùng nhưng chưa muốn commit vì chưa hoàn thiện. Lúc này, một lỗi nghiêm trọng xuất hiện ở phần backend và bạn cần phải sửa ngay.
- Lưu trữ thay đổi:
$ git stash save "UI changes before fixing backend bug"
- Chuyển sang nhánh sửa lỗi:
$ git checkout fix-backend-bug
- Sửa lỗi: …
- Quay lại nhánh ban đầu và khôi phục lại thay đổi:
$ git checkout main
$ git stash pop
Tổng kết:
Git stash là một công cụ vô cùng hữu ích để quản lý luồng công việc của bạn. Bằng cách hiểu rõ các lệnh và cách sử dụng, bạn có thể linh hoạt hơn trong quá trình phát triển dự án.
Tài liệu tham khảo
https://www.freecodecamp.org/news/useful-tricks-you-might-not-know-about-git-stash-e8a9490f0a1a