Git 请教一个 git stash 的问题

linusliu · 2014年07月30日 · 最后由 chankaward 回复于 2014年07月30日 · 4131 次阅读

本人完全是 Git 新手,在看一个人的帖子,其中有一段关于 stah 的介绍,有点不好理解,所以拿到这里来,请教大家一下:

原文是这么说的:

软件开发中,bug 就像家常便饭一样。有了 bug 就需要修复,在 Git 中,由于分支是如此的强大,所以,每个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号 101 的 bug 的任务时,很自然地,你想创建一个分支 issue -101 来修复它,但是,等等,当前正在 dev 上进行的工作还没有提交: $ git status

On branch dev

Changes to be committed:

(use "git reset HEAD ..." to unstage)

#

new file: hello.py

#

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

#

modified: readme.txt

#

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需 1 天时间。但是,必须在两个小时内修复该 bug,怎么办?

幸好,Git 还提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作: $ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge

现在,用 git status 查看工作区,就是干净的(除非有没有被 Git 管理的文件),因此可以放心地创建分支来修复 bug。

我不理解的是,为什么要先 stash 一个分支(在此例中是 dev 分支),然后才能回到 master 再新开一个分支。我不 stash dev 分支,直接回到 master,好像也可以,请问其中有什么原因吗?

之所以要 Stash,只是为了防止 checkout branch 的时候当前代码与切换过去的 branch 上的代码发生冲突而已,如果没有冲突,不 stash 也是可以的。

未提交的修改和要切换到的分支有冲突的时候是不能切的。

纠正楼主一下,stash 不是 stash 一个分支 stash 实际做的是把你当前未提交的操作产生一次没有 parent 的 commit.这个 commit 不属于任何分支。

谢谢各位的解释,明白了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号