Git 新手教程:存储与清理(八)之暂存与 stash
2023-11-09 19:34:32
Git 新手教程之存储与清理(八)
对于 Git 新手而言,在实际开发中,常常会遇到这样的情况:正在 dev 分支上开发一个功能时,突然接到紧急命令,需要修改一个紧急 bug。此时,创建一个新的分支 bug-5501 来修复 bug 的想法自然会浮出水面。然而,dev 分支上的功能只写了一半,如果直接切换到 bug-5501 分支,那么 dev 分支上的工作就会丢失。
那么,该如何解决这种两难境地呢?其实,Git 提供了「暂存」和「stash」两种方式来帮助我们处理这种情况。
暂存
暂存是将当前工作区的修改临时保存到暂存区(stage)的一种操作。使用 git add
命令可以将特定文件或所有文件暂存起来。例如:
git add myfile.txt
将 myfile.txt
文件暂存起来,或者:
git add .
将当前工作区的所有文件暂存起来。
暂存后,可以使用 git commit
命令将暂存区的内容提交到本地仓库。此时,即使切换到其他分支,暂存区的内容也不会丢失。
stash
stash 是一种更灵活的保存方式,它可以将当前工作区的修改暂时保存到一个栈中。使用 git stash
命令可以将修改 stash 起来。例如:
git stash
将当前工作区的修改 stash 起来。
stash 起来后,可以使用 git stash list
命令查看栈中的所有 stash。例如:
git stash list
输出:
stash@{0}: WIP on dev: 1234567890
表示栈中有 1 个 stash,其名称为 WIP on dev: 1234567890
。
可以使用 git stash pop
命令恢复栈顶的 stash。例如:
git stash pop
恢复栈顶的 stash,并将修改恢复到工作区。
需要注意的是,stash 只是暂时的保存,当切换分支后,stash 中的修改也会消失。因此,在切换分支前,需要先恢复所有 stash。
实践
下面,我们通过一个实际例子来演示如何使用暂存和 stash 来处理 dev 分支上的未完成工作和紧急 bug。
假设我们在 dev 分支上开发一个名为 feature-a
的功能,突然接到上级命令,需要修复 bug-5501。此时,我们可以执行以下操作:
- 暂存 dev 分支上的修改:
git add .
- 创建 bug-5501 分支:
git checkout -b bug-5501
- 修复 bug-5501
- 提交修复:
git commit -m "Fix bug-5501"
- 切换回 dev 分支:
git checkout dev
- 恢复暂存的修改:
git commit -c ORIG_HEAD
这样,我们就成功地修复了 bug-5501,同时保留了 dev 分支上的未完成工作。
总结
暂存和 stash 是 Git 中两种非常有用的工具,可以帮助我们处理实际开发中遇到的各种情况。通过熟练掌握这两项技术,我们可以大大提高开发效率。