git stash 命令
什么是 git stash
在开发过程中,经常会遇到需要切换分支或者暂时保存当前工作目录的情况,但是又不想将代码提交到版本库中。这个时候,git stash
命令就派上用场了。
git stash
命令可以用来保存或恢复工作目录中的更改,它会暂时将当前的工作目录状态储存起来,以便你可以切换分支或者合并其他分支,并在需要时重新应用储存的更改。
如何使用 git stash
1. 保存工作目录的更改
通过执行以下命令,可以将当前工作目录的更改保存起来:
git stash save "保存说明"
这个命令会将工作目录中所有未提交的更改储存为一次 stash,同时 git stash
会将这次 stash 的 ID 输出到命令行。
2. 查看 stash 列表
要查看当前所有的 stash 列表,可以运行以下命令:
git stash list
stash 的列表会显示所有保存的 stash 项,包括 ID、保存说明和提交时间。
3. 恢复 stash
有两种方法可以恢复 stash:
- 恢复最新的 stash:执行以下命令,将最新的 stash 恢复到工作目录:
git stash apply
如果你想在恢复之后删除该 stash,可以使用
--drop
选项:git stash apply --drop
- 恢复指定的 stash:执行以下命令,将特定 stash 恢复到工作目录:
git stash apply stash@{stash_id}
其中
stash_id
是 stash 的 ID,可以在git stash list
中找到。同样,如果你想在恢复之后删除该 stash,可以使用
--drop
选项。
4. 删除 stash
要删除一个或多个 stash,可以使用以下命令:
- 删除最新的 stash:
git stash drop
- 删除指定的 stash:
git stash drop stash@{stash_id}
5. 应用 stash
有时候你可能想只应用 stash 中的某些更改,而不是全部应用。这时你可以使用以下命令:
git stash branch <new_branch_name> stash@{stash_id}
这个命令会创建一个新分支 <new_branch_name>
,并将 stash 中的更改应用到该分支上。
6. stash 原理
stash 实际上是保存在 git 的一个特殊分支 refs/stash
上的提交。保存每次 stash 都会创建一个新的提交,这些提交形成一个栈结构。每当你执行 git stash save
命令时,git 就会将 stash 提交推入栈中,而执行 git stash apply
或 git stash drop
命令则会处理栈中的最新提交。
示例代码
下面通过示例代码来演示一些使用场景:
- 保存工作目录的更改:
$ echo "Hello, World!" > hello.txt $ git stash save "Save changes" Saved working directory and index state On main: Save changes
- 查看 stash 列表:
$ git stash list stash@{0}: On main: Save changes
- 恢复 stash:
$ git stash apply
或者
$ git stash apply stash@{0}
- 删除 stash:
$ git stash drop stash@{0}
- 应用 stash 到新分支:
$ git stash branch new_branch stash@{0} Switched to a new branch 'new_branch'
总结
git stash
命令是一个非常有用的工具,它可以帮助我们在工作目录中的暂时更改不需要提交到版本库时进行保存和恢复。通过合理使用 git stash
,可以更方便地处理分支切换和代码合并的情况,提高开发效率。