乐者为王

Do one thing, and do it well.

Git笔记之stash

在工作中,经常会碰到在修改代码以支持新功能时,发现线上版本出现问题需要在本地查错。因为还在进行中,所以并不想将半成品的代码提交,后面再来修改。这样就需要临时保存修改的文件,然后取出线上版本到工作目录。这个问题的解决之道就是使用git stash命令,它会暂存你的当前工作,这样以后随时可以再来修改:

1
git stash

现在,工作目录变得干净,可以安全地做些别的事情了。

要查看暂存的修改可以使用以下命令:

1
git stash list

稍后,在排除掉线上版本的错误后,你就可以取回所有暂存的修改:

1
git stash pop

现在让我们在脑中想象一个场景:在排除线上版本错误后,没有立即取回暂存的修改,而是做了其它的一些的变更,然后想把暂存的修改并入进来以完成工作。如果两次修改的代码没有冲突,那么事情完美结束;如果后修改的代码和暂存的修改有冲突,那么就会得到Merge conflict的警告。Git没有提供强制pop的功能,所以我们需要一些技巧来解决:

1
git stash show -p | git apply && git stash drop

git stash的其它一些可用选项如下所示:

1
2
3
4
git stash pop --index        # 不仅恢复工作目录,还恢复索引
git stash save "stash name"  # 使用save可以给暂存的修改添加名字
git stash save --keep-index  # 仅仅暂存未索引的文件
git stash clear              # 删除所有暂存的修改

Comments