Skip to content

git stash 暂存修改

需求

多人合作开发时,我们肯定会拥有自己的分支进行开发。当我们开发到一半时,有个 BUG 需要我们到其他分支进行修改,我们只能提交一次然后切换分支去修改。

但是这时 commit 记录上就有了很多脏的提交记录,这不是我们所希望的。

通过科学上网,找到 git stash 命令可以完美解决我们的需求。

用法

1. stash 当前修改

git stash 会把所有未提交的暂存修改保存都起来,用于后续恢复当前工作目录。

shell
git stash

需要说明一点,stash 是本地的,不会通过 git push 命令上传到 git server 上。

实际应用中推荐给每个 stash 加一个 message,用于记录版本,使用 git stash save 取代 git stash 命令。示例如下:

shell
git stash save "test-git-stash"

git stash 只能暂存已经 add 了的文件,如果想要保存未提交的可以添加指定参数:

使用 -u 或者--include-untracked 可以 stash 没有 git add 的文件。使用 -a 或者 --all 命令可以 stash 当前目录下的所有修改(包含被忽略文件)。

shell
git stash -u	// 暂存未 add 文件

git stash -a	// 暂存所有文件(包含忽略文件)

警告

尽量使用 git stash -u 不要使用 git stash -a

-a 操作会暂存你所有的文件,不会解析你的 .gitignore ,会产生许多无法被读取的文件,到时可能无法重新应用到分支上。

2. 查看现有 stash

可以使用 git stash list 命令,查看当前有多少 stash 暂存。

shell
git stash list

3. 重新应用缓存的 stash

可以通过 git stash pop 命令恢复之前缓存的工作目录。

shell
git stash pop

这个指令将缓存堆栈中的第一个 stash 删除,并将对应修改应用到当前的工作目录下。

也可以使用 git stash apply 命令,将缓存堆栈中的 stash 多次应用到工作目录中,但并不删除 stash 拷贝。

shell
git stash apply

在使用 pop 或 apply 恢复暂存时可以通过 stash@{0} 指定使用哪个 stash。默认使用最近的 stash(即 stash@{0})。

4. 移除 stash

可以使用 git stash drop 命令,后面可以跟着 stash 名字来删除这个暂存。

shell
git stash drop stash@{0}

5. 查看指定 stash 的 diff

可以使用 git stash show 命令,后面可以跟着 stash 名字来查看这个暂存有什么内容。

shell
git stash show stash@{0}

在该命令后面添加 -p 或 --patch 可以查看特定 stash 的全部 diff。

6. 从 stash 创建分支

当暂存的文件和现在修改的文件产生了冲突可以使用 git stash bransh 来新建一个分支,如果成功会删除 stash 暂存。

shell
git stash bransh newbransh

阅读原文

Released under the MIT License.