GIT STASH - CHO NHỮNG NGƯỜI THÍCH SỰ HOÀN HẢO

GIT STASH - CHO NHỮNG NGƯỜI THÍCH SỰ HOÀN HẢO

An là một lập trình viên, cậu đi làm được đôi ba năm nên cậu cũng biết chút chút gọi là để code, để hoàn thành công việc. Câu biết chắc chắn 1 điều là ngoài những thứ mà cậu biết ra còn lại là những thứ cậu chưa biết. Một ngày nọ trong mùa covid thứ 2, trong một tòa nhà to to là một văn phòng be bé, An đang ngồi trước màn hình máy tính, đồng nghiệp xung quanh đang miệt mài cạnh cạnh, thi thoảng mấy chị em lượn qua lượn lại không biết đi đâu. Cậu ngồi đó, mắt nhìn thẳng, những ngón tay đang lướt nhẹ nhàng trên bàn phím, mỗi lần nhấn phím cậu biết rằng cậu đang giúp cả thế giới trở nên tốt đẹp hơn.

An đang say sưa với dòng suy nghĩ thì Bốp- âm thanh phát ra phá vỡ sự tĩnh lặng trong tâm trí cậu, An quay ra thì anh leader đang đứng sau mắt nhìn chằm chằm vào gương mặt rám nắng của mình. Anh leader vừa mới vỗ vai cậu nói:

Leader : "Trên production có lỗi rồi, em fix nhanh cho anh nhé"
An : "Vâng anh, em fix ngay đây anh"

An quay trở lại công việc khi anh leader đã đi xa và nhận ra, sau một hồi lướt bàn phím thì tại nhánh hiện tại đang có rất nhiều thay đổi và mọi thứ vẫn đang dở dang, trong khi đó fixbug trên production phải làm ngay và cậu biết rằng mình phải tách 1 nhánh khác từ production để sửa. Sau 1 hồi suy nghĩ An nghĩ ra vài phương án:

  1. Chạy git reset --hard để loại bỏ những thay đổi đã được commit.
  2. Ghi lại công việc chưa hoàn tất bằng một commit mới.
  3. Copy những thay đổi ra đâu đó rồi chạy git reset --hard.

An đắn đo.
Tùy chọn đầu tiên làm mất tất cả công sức của mình, code cũng được mấy trang A4 rồi chứ ngu gì mà đi xóa.

Tùy chọn thứ 2 khá ổn đấy giữ lại được công việc đang dang dở nhưng đổi lại phải lưu lại 1 commit vô nghĩa, là một lập trình viên yêu cái đẹp và thích sự hoàn hảo An không cho phép mình làm việc thiếu chuyên nghiệp như vậy.

Tùy chọn 3 thì hơi mệt khi mà phải tìm và copy lại trên toàn dự án.An vừa nghĩ vừa lẩm bẩm: "Thằng ngu nào nghĩ ra cái ý tưởng này không biết".

An vẫn chưa biết phải làm sao, vậy nếu là bạn thì bạn bạn sẽ làm răng?


Dùng git stash đi An ơi, tầm này ấy mà để mình.

Git Stash giúp bạn lưu lại những phần thay đổi trong nhánh hiện tại của bạn và trả lại cho bạn một nhánh sạch sẽ như trước khi được thay đổi. Tại thời điểm này bạn có thể thoải mái thay đổi, commit, chuyển nhánh hay sử dụng bất kì câu lệnh khác của git và khi sẵn sàng bạn có thể lấy lại những thay đổi mà bạn đã lưu trong stash.

Screen-Shot-2017-07-15-at-10.18.17-PM

Dưới đây là một vài câu lệnh hay ho mà git stash cung cấp

  1. Git stash list
  2. Git stash save
  3. Git stash apply
  4. Git stash pop
  5. Git stash show
  6. Git stash branch
  7. Git stash clear
  8. Git stash drop

1. Git stash list

Khi bạn dùng git stash bản chất là git tạo ra một commit và lưu lại trong local repository của bạn, và khi bạn muốn xem danh sách các stash bạn đã lưu thì bạn dùng lệnh :

git stash list

Kết quả nhận được như sau:

stash@{0}: WIP on master: 4e22905 abc 1865891265912
(END)

2. Git stash save

Lệnh này về cơ bản nó giống với lệnh git stash nhưng nó có thêm nhiều tùy chọn để bạn sử dụng:

  • stash kèm message
git stash -m "nội dung message"

Kết quả là :

stash@{0}: On master: nội dung message
  • chỉ stash những file đã được theo dõi
git stash save -u
or
git stash save --include-untracked
  • stash tất cả các file
git stash save -a

3. Git stash apply

Lệnh này giúp bạn lấy lại code đã được stash trước đó. Nếu không chỉ ra stash muốn lấy thì nó sẽ lấy stash cuối cùng là stash@{0}.

git stash apply
same
git stash apply stash@{0}

Nếu bạn muốn lấy một stash bất kì thì thêm id của stash vào nhé. VD ở đây mình muốn lấy stash@{1}

git stash apply stash@{1}

Note: Nếu bạn đang thắc mắc lấy id của stash ở đâu thì kéo lên trên coi phần git stash list nhé

4. Git stash pop

Lệnh này khá giống với lệnh git stash apply chỉ có điều nó sẽ đồng thời xóa stash trong danh sách stash của bạn.

Mặc định nó sẽ lấy stash đầu tiên trong stash list, khi muốn lấy stash bất kỳ bạn thêm id stash vào nhé.Vd ở đây mình muốn lấy stash@{1}

git stash pop stash@{1}

5. Git stash show

Lệnh này hiển thị những file đã thay đổi mà bạn đã bạn đã lưu vào 1 stash nào đó. Mặc định lệnh này áp dụng cho stash cuối cùng là stash@{0}, nếu bạn muốn xem cụ thể 1 stash thì thêm id stash

git stash show stash@{1}

Khi bạn muốn xem chi tiết nội dung thay đổi thì thêm tùy chọn -p

git stash show stash@{1} -p

6. Git stash branch

Tạo một branch mới với nhưng thay đổi tương ứng trong stash cuối cùng của bạn và cũng xoá nó khỏi stash list như git stash pop.

git stash branch ten-branch

Khi bạn muốn áp dụng với một stash cụ thể thì thêm id stash vào sau tên branch

git stash branch ten-branch stash@{1}

7. Git stash clear

Lệnh này sẽ xoá toàn bộ stash bạn đã lưu trong local repository. Sử dụng lệnh này là mất code đó nên bạn nhớ lấy lại code vào branch trước khi sử dụng.

git stash clear

8. Git stash drop

Xóa stash nào đó trong local repository. Mặc định câu lệnh này sẽ áp dụng với stash@{0}. Sử dụng lệnh này là mất code đó nên bạn nhớ lấy code đã thay đổi trước khi sử dụng.

git stash drop

Xoá stash cụ thể bằng việc thêm id stash

git stash drop stash@{1}

Phần kết

Ngoài ra còn rất nhiều điều thú vị khác trong link sau :
https://git-scm.com/docs/git-stash

Hi vọng các bạn và cả An nữa sẽ dành thời gian để tìm hiểu.
Chúc các bạn ngày càng hoàn hảo trong công việc và cuộc sống.