Trong quá trình làm việc với Git, có những lúc bạn muốn tạm thời lưu các thay đổi chưa hoàn thành mà không muốn commit ngay lập tức. Lúc này, git stash sẽ là công cụ rất hữu ích. Trong bài viết này, chúng ta sẽ tìm hiểu về git stash, git stash pop, cách lưu các thay đổi tạm thời và cách khôi phục chúng khi cần thiết.

Git Stash là gì?

git stash là lệnh dùng để lưu trữ tạm thời các thay đổi chưa commit của bạn. Nó cho phép bạn làm việc khác mà không lo lắng về việc mất các thay đổi. Khi bạn đã sẵn sàng quay lại, bạn có thể khôi phục những thay đổi này bằng lệnh git stash pop hoặc git stash apply.

git stash

Lệnh này sẽ lưu tất cả các thay đổi chưa được commit, bao gồm những file đã thay đổi và file đã được stage (được thêm vào chỉ mục với git add), vào một danh sách stash.

Khi nào nên sử dụng git stash?

  • Khi bạn đang làm việc trên một tính năng nhưng cần chuyển đổi nhanh sang một nhánh khác.
  • Khi bạn chưa muốn commit các thay đổi hiện tại nhưng cần thử nghiệm hoặc làm việc khác mà không muốn các thay đổi này ảnh hưởng đến nhánh hiện tại.
  • Khi bạn muốn giữ lại các thay đổi tạm thời mà không muốn commit vào lịch sử của dự án.

Cách sử dụng git stash để lưu thay đổi

Lưu thay đổi với git stash

Giả sử bạn đang làm việc trên một nhánh và đã thực hiện một số thay đổi, nhưng bạn không muốn commit chúng ngay lập tức. Để lưu trữ tạm thời những thay đổi này, bạn chỉ cần chạy lệnh sau:

git stash

Sau khi chạy lệnh, Git sẽ lưu trữ tất cả các thay đổi và khôi phục trạng thái của repository về tình trạng sạch (clean), tức là không còn thay đổi nào chưa commit.

Kiểm tra danh sách stash

Sau khi lưu thay đổi vào stash, bạn có thể kiểm tra danh sách các stash hiện có bằng lệnh:

git stash list

Kết quả của lệnh này sẽ hiển thị tất cả các stash mà bạn đã lưu:

stash@{0}: WIP on main: abc1234 Some work in progress
stash@{1}: WIP on feature: def5678 Feature development

Mỗi stash sẽ có một index (ví dụ stash@{0}), dùng để nhận diện stash khi bạn muốn khôi phục hoặc xóa.

Git Stash Pop là gì?

git stash pop là lệnh dùng để khôi phục các thay đổi từ stash và xóa stash đó khỏi danh sách. Khi bạn dùng lệnh này, Git sẽ áp dụng lại những thay đổi mà bạn đã lưu vào stash và đồng thời xóa stash đó đi.

git stash pop

Nếu bạn có nhiều stash và muốn khôi phục một stash cụ thể, bạn có thể chỉ định vị trí của stash trong danh sách:

git stash pop stash@{1}

Sau khi chạy lệnh này, stash được chỉ định sẽ được áp dụng vào trạng thái hiện tại của repository và sẽ bị xóa khỏi danh sách stash.

Phân biệt git stash popgit stash apply

  • git stash pop: Khôi phục stash và đồng thời xóa stash khỏi danh sách.
  • git stash apply: Chỉ khôi phục stash mà không xóa stash khỏi danh sách. Nếu bạn chỉ muốn áp dụng các thay đổi từ stash mà không xóa stash đó, sử dụng git stash apply.

Ví dụ:

git stash apply stash@{0}

Lệnh trên sẽ khôi phục stash đầu tiên mà không xóa nó khỏi danh sách stash.

Cách lưu thay đổi với thông báo tùy chỉnh

Nếu bạn muốn lưu stash kèm theo một thông báo tùy chỉnh để dễ quản lý, bạn có thể dùng lệnh sau:

git stash save "My custom stash message"

Điều này giúp bạn phân biệt rõ ràng hơn giữa các stash, đặc biệt khi làm việc với nhiều thay đổi.

Các trường hợp sử dụng git stashgit stash pop

Trường hợp 1: Lưu thay đổi tạm thời và chuyển nhánh

Bạn đang làm việc trên nhánh feature và cần chuyển sang nhánh main để kiểm tra một lỗi, nhưng bạn chưa muốn commit các thay đổi hiện tại.

git stash
git checkout main

Sau khi kiểm tra và sửa lỗi xong trên nhánh main, bạn có thể quay lại nhánh feature và khôi phục các thay đổi bằng lệnh:

git checkout feature
git stash pop

Lúc này, tất cả các thay đổi trước đó sẽ được khôi phục và stash sẽ bị xóa khỏi danh sách.

Trường hợp 2: Lưu nhiều stash và khôi phục stash cụ thể

Giả sử bạn đã lưu nhiều stash trong quá trình phát triển, và muốn khôi phục một stash cụ thể.

git stash list
git stash pop stash@{1}

Lệnh trên sẽ áp dụng lại stash stash@{1} và xóa stash này khỏi danh sách.


Việc sử dụng git stashgit stash pop giúp bạn linh hoạt hơn trong quá trình phát triển dự án. Bạn có thể lưu trữ các thay đổi tạm thời mà không cần commit, và khi cần, bạn có thể khôi phục lại những thay đổi này một cách dễ dàng. Hãy sử dụng chúng để tối ưu hóa quá trình làm việc và quản lý các thay đổi của bạn hiệu quả hơn.