不知道大家有没有遇到这样的情况:为了本地部署测试环境,修改了某些文件,然后去git pull的时候,发现仓库里的代码和本地修改的文件有冲突。这时大家会怎么做?
- 方法一:把本地修改的git add,push到仓库去。
- 方法二:把本地修改的git checkout,放弃本地修改。
上面两种常规做法都是可行的。但是如果既不想把这些修改放到仓库,又不想每次拉代码前放弃本地修改呢?这时候当当当当~~~git stash可以帮上忙!
我们先来看看git stash有哪些命令吧:

stash的意思是: 存放; 贮藏; 隐藏。那么我们可以理解了:这个命令就是要执行一个存储相关的操作。
接下来我们一步步通过实践来看看git stash是如果工作的吧。
一、准备实践环境,制造文件merge冲突
- 在本地修改了两个文件“a.txt”和“c.txt”。还新加了一个文件“b.txt”,删除了“d.txt”.
- 同时在仓库里直接修改了"a.txt"

二、执行git stash save操作
- 执行了git stash save之后,可以看到将修改的文件存储到了堆栈里。
- 再次git status,发现之前本地修改的内容已经没有了。(这里也可以看出git stash不会把本地新增的文件存储进去,而只是存储修改的和删除的文件)

三、拉新代码后将存储的本地文件覆盖回来
- 拉新代码:git pull
- 再将上一步存储的文件pop出来 (git stash pop)
- 发现冲突,按照常规的冲突解决办法解决冲突即可。(这种情况下stash的备份还是存在,需要执行git stash drop stash@{0}即可)
完成!
温馨提示:
git stash pop:执行完成后没有冲突的情况下,stash栈里会清空;
git stash apply stash@{n}: 会拿取指定的栈内备份而不删除栈内数据。
根据需求用即可。
Git Stash实践操作
原文:https://www.cnblogs.com/jackolantern/p/13426053.html