返回

Git 新手教程:存储与清理(八)之暂存与 stash

Android

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。此时,我们可以执行以下操作:

  1. 暂存 dev 分支上的修改:git add .
  2. 创建 bug-5501 分支:git checkout -b bug-5501
  3. 修复 bug-5501
  4. 提交修复:git commit -m "Fix bug-5501"
  5. 切换回 dev 分支:git checkout dev
  6. 恢复暂存的修改:git commit -c ORIG_HEAD

这样,我们就成功地修复了 bug-5501,同时保留了 dev 分支上的未完成工作。

总结

暂存和 stash 是 Git 中两种非常有用的工具,可以帮助我们处理实际开发中遇到的各种情况。通过熟练掌握这两项技术,我们可以大大提高开发效率。