Trong quá trình phát triển phần mềm, đôi khi bạn cần tạm thời lưu trữ những thay đổi chưa hoàn thiện để chuyển sang một nhiệm vụ khác hoặc xử lý một lỗi khẩn cấp. Git stash chính là công cụ đắc lực giúp bạn thực hiện điều này một cách gọn gàng và hiệu quả. Bài viết này sẽ đi sâu vào phân tích git stash là gì, lý do cần sử dụng và hướng dẫn chi tiết cách áp dụng các lệnh liên quan.
Tại sao bạn cần sử dụng Git Stash?
Trong môi trường phát triển phần mềm, tính linh hoạt và khả năng thích ứng nhanh là yếu tố then chốt. Có nhiều tình huống mà git stash trở nên vô cùng hữu ích:
- Chuyển đổi nhanh sang nhánh khác: Khi bạn đang làm dở một tính năng nhưng cần gấp rút kiểm tra hoặc sửa lỗi trên một nhánh khác,
git stashgiúp bạn cất đi những thay đổi hiện tại mà không cần commit vội. - Xử lý các tình huống khẩn cấp: Nếu có một lỗi nghiêm trọng cần khắc phục ngay lập tức, bạn có thể
git stashcông việc đang dang dở, xử lý lỗi, sau đó quay lại và tiếp tục công việc cũ. - Giữ cho lịch sử commit sạch sẽ: Thay vì thực hiện các commit tạm bợ chỉ để lưu lại thay đổi,
git stashcho phép bạn giữ cho lịch sử commit của mình mạch lạc và ý nghĩa hơn. - Làm việc với các bản cập nhật từ xa: Đôi khi bạn cần kéo các thay đổi mới từ remote về máy, nhưng lại có những thay đổi cục bộ chưa sẵn sàng để commit.
git stashgiúp bạn làm sạch thư mục làm việc để việc pull diễn ra suôn sẻ.

Các lệnh Git Stash cơ bản và cách sử dụng
Git cung cấp một bộ lệnh mạnh mẽ để quản lý các stash. Dưới đây là những lệnh thông dụng nhất:
Lưu trữ thay đổi với git stash hoặc git stash push
Để lưu trữ các thay đổi hiện tại (bao gồm cả những thay đổi đã staged và unstaged trong các tệp đã được theo dõi), bạn sử dụng lệnh:
git stash
Lệnh này sẽ lưu lại trạng thái hiện tại của thư mục làm việc và khu vực staging, đồng thời làm sạch chúng. Nếu bạn muốn thêm một thông điệp mô tả cho stash để dễ nhớ, hãy sử dụng:
git stash push -m "Thông điệp mô tả stash của bạn"
Ví dụ:
git stash push -m "WIP: Đang phát triển tính năng đăng nhập"

Xem danh sách các Stash với git stash list
Khi bạn có nhiều stash, việc xem lại danh sách là cần thiết. Lệnh git stash list sẽ hiển thị tất cả các stash đã được lưu trữ, theo thứ tự từ mới nhất đến cũ nhất:
git stash list
Kết quả hiển thị sẽ có dạng:
stash@{0}: On main: WIP: Đang phát triển tính năng đăng nhập stash@{1}: On feature-branch: Thêm các thay đổi ban đầu cho API stash@{2}: WIP on main: abc1234 Thêm một số cập nhật nhỏ Trong đó, stash@{0} là stash mới nhất.
Áp dụng lại Stash với git stash apply
Để khôi phục lại các thay đổi từ một stash, bạn sử dụng lệnh git stash apply. Theo mặc định, lệnh này sẽ áp dụng stash mới nhất (stash@{0}).
git stash apply
Nếu bạn muốn áp dụng một stash cụ thể, hãy chỉ định tên của nó:
git stash apply stash@{1}
Lưu ý: git stash apply sẽ khôi phục lại các thay đổi nhưng vẫn giữ stash đó trong danh sách. Điều này hữu ích khi bạn muốn áp dụng cùng một stash cho nhiều nhánh khác nhau.
Kết hợp áp dụng và xóa Stash với git stash pop
Nếu bạn chỉ muốn áp dụng một stash và sau đó xóa nó khỏi danh sách ngay lập tức, hãy sử dụng lệnh git stash pop.
git stash pop
Tương tự như apply, bạn có thể chỉ định stash cụ thể:
git stash pop stash@{2}
Đây là lệnh thường được sử dụng nhất khi bạn đã sẵn sàng tiếp tục công việc đã tạm lưu.
Xem chi tiết nội dung Stash với git stash show
Để xem những thay đổi nào đã được lưu trong một stash mà không cần áp dụng chúng, bạn dùng git stash show:
git stash show (hiển thị thay đổi của stash mới nhất)
git stash show stash@{1} (hiển thị thay đổi của stash cụ thể)
Lệnh này sẽ hiển thị tóm tắt về các tệp đã thay đổi. Để xem chi tiết từng dòng thay đổi, bạn có thể thêm tùy chọn -p (patch):
git stash show -p
Lưu ý khi sử dụng Git Stash
Mặc dù git stash rất tiện lợi, có một vài điểm bạn cần lưu ý:
- Untracked files: Theo mặc định,
git stashkhông lưu các tệp mới (untracked files). Để bao gồm cả các tệp này, bạn cần sử dụng tùy chọn-uhoặc--include-untracked:git stash -u. - Conficts: Khi áp dụng lại stash, có thể xảy ra xung đột nếu các thay đổi trong stash mâu thuẫn với những thay đổi hiện tại trên thư mục làm việc của bạn. Bạn sẽ cần giải quyết các xung đột này tương tự như khi merge hoặc rebase.
- Stash với nhiều thay đổi phức tạp: Với các stash chứa nhiều thay đổi phức tạp hoặc trên nhiều tệp, việc áp dụng có thể cần sự cẩn trọng.
Kết luận
Git stash là một công cụ không thể thiếu trong bộ công cụ của bất kỳ lập trình viên nào sử dụng Git. Nó giúp bạn quản lý trạng thái làm việc của mình một cách linh hoạt, giữ cho thư mục làm việc luôn sạch sẽ và lịch sử commit gọn gàng. Hãy thực hành sử dụng các lệnh git stash apply, git stash pop, và git stash list thường xuyên để làm chủ công cụ này và nâng cao hiệu suất làm việc của bạn.