git教程(五)

:-}

git-stash

背景

相信很多人对git的使用还只停留在:git add、git commit、git pull、git push这些基本的git操作;当遇到一些稍微复杂一些处理的时候显得方法不多,工具没有的情况,在这里我说一说git-stash这个命令以及为什么应该经常使用,希望能够对你有启发。

释义

隐藏/存储 发生变化的‘脏’的工作区

解析

使用git我们一定清楚git的三个代码存放环境:工作区、版本库、远程仓库;简单描述就是我们修改的代码在工作区中,通过git-add和git-commit提交到版本库,纳入版本(git)管理,再通过git-push明天推送到远程仓库,和小伙伴们共享我们的劳动成果。在没有执行相应的命令之前,版本库和远程仓库保持原有的代码,我们的变更只是在我们本地的机器上,而版本库和远程仓库没有任何影响。

其实git还有一个仓储区:一个堆栈式的存储区;以方便我们任何时候将我们的‘脏’的工作区变成一个‘干净’的工作区;我们辛苦的劳动成果此时就不见了,但是别担心,git已经把修改的代码保存到了一个暂存区中,并没有丢失。

命令

git stash        存储工作区的变更
git stash list   列出暂存区中已经保存的变更
git stash apply  应用某个暂存的变更到工作区,也就是取出指定的某一次暂存内容应用到当前工作区
git stash pop    应用某个暂存的变更到工作区,并从堆栈中将这次暂存记录移走
git stash drop   删除指定的某个暂存记录
git stash clear  清空所有的暂存记录

情境

为什么要先用git-stash?再拉去代码?再提交代码?

也许是客户那边的代码管理开发想要让对git还不是很熟悉的小伙伴们尽可能的减少提交代码时出现问题!但是我仔细想了想也测试一下,发现其实这样并没有什么作用!该冲突的还是会在git stash pop时冲突需要解决,也并不能保证线性提交(fast-forward)。

我能想到的好处

可能代码管理者是为了让每个开发人员在需要同步代码时,不在必须提交自己还在工作中的那些工作区代码!因为当git pull拉去远程代码时,如果远程仓库中的某次提交修改的某个文件也正是你正在改动的文件,git会要求你先提交,再拉取;所以如果你暂时还不想提交,就可以使用git-stash。所以这么做其实是为了你能实时同步远程仓库代码而不必每次同步都必须把自己未完成的代码也提交到版本库。

正确的顺序应该是这样:

可随时执行,用于同步远程仓库代码:

git stash clear
git stash
git pull
git stash pop

提交代码时执行:

git stash clear
git stash
git pull
git stash pop
git add .
git commit -m 'xx'
git push