Git Stash - 存储你的工作成果

前面一节已经讲明白了,在切换分支之前一定要保持工作区干净,否则不仅仅是有可能产生冲突进而导致切换失败,而且可能会丢失工作区的工作成果。因此,我们实际上很需要一个暂时存储的机制。 Git Stash 就是干这个的:

  • 把工作区和暂存区的成果保存到一个安全的地方。
  • 回来的时候再把数据恢复出来。

举个例子

第一阶段 - 正常工作

首先,我们正常开发:

$ git checkout -b feature
$ echo This is the README file. > README
$ git add README
$ git commit -m "init"

然后我们在工作区作出修改:

$ echo Add to the working dir version of README >> README
$ echo file2 is here > file2
$ ls
file2 README

第二阶段 - 出现 bug

正当我们在工作区继续工作的时候,出现了一个紧急的线上 bug,现在的当务之急就是回到 master 分支上,然后切出一个 hot-fix 分支去修 bug。

那么目前该做的就是把当前工作区的内容储存下来。

$ git add file2
$ git stash
$ ls
README
cat README
This is the README file.

不需要把 README 添加到暂存区,因为它已经在暂存区了。Git 会发现工作区的 README 比暂存区的更新,然后把工作区的给存储下来。

从上面测试的信息可以看出来:

  • 工作区的修改都藏起来了
    • file2 不见了
    • README 的第二行不见了

第三阶段 - 修完 bug 回到原地

修完 bug 之后回到 feature 分支,现在要做的就是把之前的状态恢复出来:

$ git stash pop
$ ls
file2 README
This is the README file.
Add to the working dir version of readme

至此,一个最简单的 stash 工作流就完成了。实际上除了切换分支之外,合并分支也有保存工作区状态的需要。

提交 WIP

除了 stash 之外,在 git_reset 这个命令的介绍里面,也提到了一个 Interrupted Workflow。

在那儿介绍的办法是,先提交未完成的工作,并把提交信息写成"WIP",然后切换分支就没有障碍了。等再切回来的时候,用git reset HEAD^把 WIP 这个提交的 HEAD 和暂存区都撤销掉,相当于清除了这个临时的 WIP 提交。然后在工作区里接着工作,无缝连接。具体可以参考git_reset

results matching ""

    No results matching ""