Git stash后如何选择性恢复部分修改内容?

司马景景 阅读 82

在开发新功能时用git stash暂存了所有改动,现在想恢复某个文件的修改但不想影响其他文件。之前试过git stash apply但发现所有改动都被恢复了,有没有办法只恢复特定文件的修改?

比如我修改了三个文件,但只想恢复src/components/MyComponent.js的改动。尝试过git checkout stash@{0} -- src/components/MyComponent.js但提示”error: pathspec ‘stash@{0}’ did not match any file(s) known to git”。

另外发现 stash 列表里有多个条目,怎么确认要操作的是最新的那个 stash?用git stash list看到的ID是不是可以直接用在命令里?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
树萱
树萱 Lv1
用 git stash show -p stash@{0} 看下内容确认对不对,然后直接 git checkout stash@{0} -- src/components/MyComponent.js 恢复单个文件。stash@{0} 是最新的一条,list 显示的顺序从 0 开始递增,没错的,试试就行。
点赞 5
2026-02-12 12:11
东方光纬
恢复单个文件的改动确实是个常见需求,git checkout stash@{0} -- src/components/MyComponent.js 这个命令思路是对的,但写法有点小问题。正确的方式是:

git restore --source=stash@{0} -- src/components/MyComponent.js


或者用更传统的写法:

git checkout stash@{0} -- src/components/MyComponent.js


注意路径和 stash 的引用格式要严格匹配,中间不能加空格之类的。

关于确认最新的 stash,直接用 stash@{0} 就是最新的那次暂存。如果想指定某个特定的 stash,比如 stash@{2} 或者具体的 stash 名称(从 git stash list 里看到的),也完全可以用在命令里替换掉 stash@{0}

如果还是报错,检查下文件路径是不是拼写错了,或者这个文件在 stash 时根本没被修改过。这种时候可以先用 git stash show -p 看看具体的改动内容,确认一下你要恢复的文件到底有没有在 stash 里。
点赞 15
2026-01-30 17:54