储藏更改
现在工作区已经设置好了,让我们制造一些更改并学习如何储藏它们。
首先,让我们对 README.md 文件进行一些修改:
echo "This is a work in progress" >> README.md
此命令会在 README.md 文件末尾追加一行。我们再创建一个新文件:
echo "Some important notes" > notes.txt
现在,如果我们运行 git status,会看到既有已修改的文件,也有未跟踪的文件:
git status
你应该会看到输出显示 README.md 已修改,而 notes.txt 是未跟踪的(untracked)。
想象一下,此时你需要快速切换到另一个任务,但你还没准备好提交这些更改。这就是 git stash 派上用场的地方!
要储藏你的更改,请运行:
git stash
你应该会看到类似这样的输出:
Saved working directory and index state WIP on master: 1234567 Initial commit
现在,如果你再次运行 git status,你会发现一些有趣的现象:
git status
你会注意到,虽然 README.md 不再显示为已修改,但 notes.txt 仍然被列为未跟踪文件。这是关于 git stash 的一个关键点:
重要提示: 默认情况下,git stash 只会储藏:
- 对已跟踪文件(Git 已经在管理的文件)的更改
- 已暂存的更改
未跟踪的文件(比如我们的 notes.txt)默认不会包含在储藏中。这种行为是为了确保 Git 不会意外隐藏你可能不想包含在仓库中的新文件。
如果你想在储藏中包含未跟踪的文件,可以使用 -u(或 --include-untracked)选项:
git stash -u
运行此命令后,对 README.md 的更改和新的 notes.txt 文件都会被储藏起来。
要查看储藏库中的内容,可以使用:
git stash list
你应该会看到一到两个储藏条目,具体取决于你之前是否使用了 -u 选项。
按 q 键退出储藏列表视图。
请记住,储藏非常适合快速切换上下文。但是,它不能替代长期工作流中的提交。储藏应该是临时性的存储。