Git 简明教程

Git - Stash Operation

假设你正在为你的产品实现一种新功能。你的代码正在进行中,突然收到客户升级。由于这一点,你不得不搁置你的新功能工作几个小时。你无法提交你的部分代码,也不能抛弃你的更改。所以,你需要一些临时空间,在那里你可以存储你的部分更改并在以后提交它们。

在 Git 中,存储操作需要你的已修改的跟踪文件、阶段更改,并将它们保存到一个未完成的更改堆栈中,你可以在任何时候重新应用这些更改。

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

现在,你想切换分支进行客户升级,但你不想提交你尚未完成的工作,因此你将存储这些更改。要将一个新存储推送到你的堆栈中,请运行 git stash 命令。

[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

现在,你的工作目录已清除,所有更改都已保存在堆栈中。让我们使用 git status 命令对其进行验证。

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

现在,你可以安全切换分支并在其他地方工作。我们可以使用 git stash list 命令查看存储的更改的列表。

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

假设你已解决了客户升级,并且你回到新功能正在寻找你一半完成的代码,只需执行 git stash pop 命令,即可从堆栈中删除更改并将它们放置在当前工作目录中。

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

[jerry@CentOS project]$ git stash pop

上述命令将生成以下结果:

# 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