Git - Hoạt động Stash

Giả sử bạn đang triển khai một tính năng mới cho sản phẩm của mình. Mã của bạn đang được xử lý và đột nhiên có khách hàng báo cáo. Do đó, bạn phải tạm gác công việc tính năng mới của mình trong vài giờ. Bạn không thể cam kết một phần mã của mình và cũng không thể vứt bỏ các thay đổi của mình. Vì vậy, bạn cần một số không gian tạm thời, nơi bạn có thể lưu trữ các thay đổi từng phần của mình và sau này cam kết.

Trong Git, thao tác lưu trữ lấy các tệp được theo dõi đã sửa đổi của bạn, các thay đổi theo giai đoạn và lưu chúng vào một chồng các thay đổi chưa hoàn thành mà bạn có thể áp dụng lại bất kỳ lúc nào.

[jerry@CentOS project]$ git status -s
M string.c
?? string

Bây giờ, bạn muốn chuyển các nhánh để thu hút khách hàng, nhưng bạn chưa muốn cam kết những gì bạn đang làm; vì vậy bạn sẽ lưu trữ các thay đổi. Để đẩy một kho mới vào ngăn xếp của bạn, hãy chạygit stash chỉ huy.

[jerry@CentOS project]$ git stash
Saved working directory and index state WIP on master: e86f062 Added my_strcpy function
HEAD is now at e86f062 Added my_strcpy function

Bây giờ, thư mục làm việc của bạn đã sạch và tất cả các thay đổi được lưu trên một ngăn xếp. Hãy để chúng tôi xác minh điều đó vớigit status chỉ huy.

[jerry@CentOS project]$ git status -s
?? string

Bây giờ bạn có thể yên tâm chuyển chi nhánh và làm việc ở nơi khác. Chúng tôi có thể xem danh sách các thay đổi được lưu trữ bằng cách sử dụnggit stash list chỉ huy.

[jerry@CentOS project]$ git stash list
stash@{0}: WIP on master: e86f062 Added my_strcpy function

Giả sử bạn đã giải quyết vấn đề khách hàng và bạn quay lại tính năng mới để tìm kiếm mã đã hoàn thành một nửa của mình, chỉ cần thực thi git stash pop để xóa các thay đổi khỏi ngăn xếp và đặt chúng vào thư mục làm việc hiện tại.

[jerry@CentOS project]$ git status -s
?? string

[jerry@CentOS project]$ git stash pop

Lệnh trên sẽ cho kết quả sau:

# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
#
modified: string.c
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
#
string
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (36f79dfedae4ac20e2e8558830154bd6315e72d4)

[jerry@CentOS project]$ git status -s
M string.c
?? string