TỔNG QUAN
LÀM VIỆC BRANCH
TÌM HIỂU COMMIT
LÀM VIỆC VỚI REMOTE
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Git - Stash trở về trạng thái ban đầu

Trong bài này mình sẽ nói về lệnh $ git stash, đây là lệnh dùng để thiết lập trạng thái ban đầu cho tất cả các file nằm trong thư mục làm việc (working directory). Trạng thái ban đầu ở đây chính là nội dung dữ liệu ban đầu của file (so với commit cuối cùng hoặc pull từ remote repository).

1. Lệnh git stash - dùng cho tất cả dữ liệu

Lệnh git stash sẽ có tác dụng với tất cả dữ liệu đang hoạt động trong working directory với điều kiện là dữ liệu đó đã được đưa vào trạng thái Staged hoặc đã từng được committed.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Cú pháp
$ git stash

Ví dụ: Sau một hồi code cho file demo.php bạn nhận thấy rằng code bị lôi quá nhiều không thể sửa chữa được nữa, vì vậy bạn muốn reset nó về nội dung ban đầu. Sẽ có hai trường hợp như sau:

Trường hợp 1: Nếu file bạn mới tạo, chưa đưa vào stage (chưa sử dụng lệnh add)

Trường hợp này bạn chỉ cần xóa hết nội dung là được, bởi file chưa đưa vào khu vực tổ chức (stage).

Trường hợp 2: File đã được đưa vào stage hoặc đã tồn tại trước đó (được committed).

Trường hợp này bạn sẽ chạy lệnh $ git stash để đưa nội dung của file về trạng thái ban đầu.

$ git stash

Kết quả bạn nhận được dạng như sau: 

Saved working directory and index state WIP on master: 7d84ae1 sd HEAD is now at 7d84ae1 sd

Lưu ý: Khi bạn gọi git stash thực chất bạn đang gọi tắt, lệnh full sẽ là git stash save.

2. Các tham số của git stash

Chúng ta có một số tham số đằng sau lệnh stash, mỗi tham số có một ý nghĩa và công dụng khác nhau.

$ git stash list

Xem danh sách bao nhiêu lệnh stash đã dùng.

Giả sử bạn đã stash rất nhiều lần và muốn xem danh sách và địa chỉ của nó thì chạy lệnh $ git stash list.

Xem danh sách stash
$ git stash list

Kết quả dạng thế này
stash@{0}: WIP on master: 7d84ae1 sd
stash@{1}: WIP on master: 7d84ae1 sd

$ git stash pop

Xóa một stash ra khỏi lịch sử.

Lệnh này sẽ không thực thi nếu có xảy ra xung đột, lúc này bạn cần phải xử lý thủ công bằng tay và sử dụng lệnh git stash drop để thay thế.

Lệnh này có thêm một tham số đó là  $ git stash drop <stash>. Nếu bạn không truyền stash thì mặc định nó sẽ lấy stash đầu tiên stash@{0}.

Xem danh sách stash
$ git stash list

Xóa stash có địa chỉ là stash@{1}.

git stash pop stash@{1}

$ git stash apply

Phục hồi lệnh stash, không xóa khỏi history.

Nếu bạn muốn phục hồi tất cả các lệnh stash, tức là lấy lại nội dung trước khi chạy lệnh stash thì dùng tham số apply.

Phục hồi
$ git stash apply

$ git stash show

Xem chi tiết của một stash, so sánh nó với dữ liệu ban đầu.

Nếu bạn muốn xem chi tiết dữ liệu lúc chạy lệnh stash so với thời điểm ban đầu thì sử dụng tham số show.

Xem chi tiết stash
$ git stash show

Nó có một tham số đó là địa chỉ của stash muốn xem $ git stash show <stash>. Nếu bạn không truyền <stash> thì mặc định nó sẽ lấy stash mới nhất.

$ git stash clear

Nếu bạn muốn xóa tất cả stash ra khỏi history thì sử dụng tham số clear.

Xóa lịch sử stash
$ git stash clear

Bạn hãy thử chạy lại lệnh git stash list thì sẽ thấy danh sách rỗng.

$ git stash drop

Nếu bạn muốn xóa một stash thôi thay vì xóa tất cả thì sử dụng lệnh git stash drop <stash>.

Nếu bạn không truyền giá trị <stash> thì nó sẽ xóa stash cuối cùng.

Trước tiên chúng ta xem danh sách stash đã nhé.

$ git stash list
stash@{0}: WIP on master: 7d84ae1 sd
stash@{1}: WIP on master: 7d84ae1 sd

Giả sử cần xóa stash@{0} thì viết lệnh như sau:

$ git stash drop stash@{0}

Điểm khác biệt  so với lệnh git stash pop là khi không truyền tham số <stash> thì nó xóa stash cuối cùng, còn pop thì xóa stash đầu tiên.

$ git stash save

Lệnh git stash create dùng để tạo một stash nhưng không lưu trữ vào thư mục refs mà thay vào đó trả về tên của object. lệnh này rất ít khi sử dụng. Lệnh này 

$ git stash store

Nếu bạn lỡ sử dụng lệnh stash save nhưng sau muốn lưu nó vào thư mục refs thì sử dụng tham số store.

3. Lời kết

Như vậy làm mình đã giới thiệu sơ lược về cách sử dụng lệnh stash để thiết lập trạng thái ban đầu của các file trong thư mục làm việc. Khi sử dụng stash bạn phải cân nhắc thật kỹ để tránh mất dữ liệu và phải làm lại từ đầu.

Nếu bạn đã lỡ stash rồi thì không sao, hãy vận dụng các tham số mà git đã cung cấp để phục hồi một cách nhanh và chính xác nhất.

Cùng chuyên mục:

Push data lên Github

Push data lên Github

Mình sẽ không viết cách clone source từ github về mà sẽ trình bày cách…

Git - Lưu thông tin đăng nhập với credential store

Git - Lưu thông tin đăng nhập với credential store

Khi bạn thực hiện bất kì thao tác nào liên quan đến remote thì bắt…

Tạo remote repository trên Github

Tạo remote repository trên Github

Như trong bài giới thiệu series thì trong bài này chúng ta sẽ bắt đầu…

Git - Push data lên remote Repository

Git - Push data lên remote Repository

Nếu bạn là leader và bạn khởi động cho dự án thì công việc đầu…

Git - Đổi tên remote repository

Git - Đổi tên remote repository

Nếu bạn đã lỡ đặt tên cho remote không đúng thì có thể sử dụng…

Git - Xóa remote repository

Git - Xóa remote repository

Trường hợp bạn đã thêm một remote repo nhưng sau đó bạn nhận thấy đã…

Git - Thêm remote Repository

Git - Thêm remote Repository

Để làm việc với remote thì ban phải có server và cài đặt git remote…

Git - Xóa local branch

Git - Xóa local branch

Thông thường mỗi một nhiệm vụ chúng ta sẽ làm việc trên một branch khác…

Git - Phân nhánh với Rebase

Git - Phân nhánh với Rebase

Trong Git, có hai cách để trộn hai nhánh với nhau đó là sử dụng…

Git - Amend, thay đổi commit cuối cùng

Git - Amend, thay đổi commit cuối cùng

Trong một số trường hợp bạn commit nhưng bị quên add một số file nào…

Git - Mô hình dữ liệu kho chứa

Git - Mô hình dữ liệu kho chứa

Ở các chương trước mình đã giới thiệu một số lệnh làm việc với branch…

Git -  Ba trạng thái Committed  Staged Modified

Git - Ba trạng thái Committed Staged Modified

Trong bài này chúng ta cùng thảo luận đến ba trạng thái của Git, đây…

Git - Lệnh merge branch - Xử lý conflict

Git - Lệnh merge branch - Xử lý conflict

Merge branch tức là bạn gộp hai branch lại với nhau, thao tác này thường…

Git - Commit căn bản

Git - Commit căn bản

Trước khi chuyển đổi sang branch khác thì bạn nên lưu lại tất cả những…

Git - Lệnh checkout branch

Git - Lệnh checkout branch

Nếu chúng ta làm việc trên nhiều branch thì phải thực hiện thao tác chuyển…

Git - Lệnh tạo Branch

Git - Lệnh tạo Branch

Như mình đã trình bày ở bài trước khi làm việc nhóm thì leader sẽ…

Git - Branch là gì? Branch master

Git - Branch là gì? Branch master

Khi làm việc với Git bắt buộc chúng ta phải thông qua branch, nhưng chúng…

Git - Tạo Repository

Git - Tạo Repository

Trong bài này mình sẽ hướng dẫn các bạn khái niệm Repository là gì và…

Git - thao tác thư mục

Git - thao tác thư mục

Để sử dụng Git nhuần nhuyễn thì đòi hỏi bạn phải có kỹ năng thao…

Git - Cấu hình username và email

Git - Cấu hình username và email

Trước khi sử dụng Git thì bạn cần phải cấu hình hai thông số đó…

Top