在 Git 中使用 git stash暂存本地修改后,如果需要找回这些修改,可以通过以下步骤操作:
一、查看 stash 列表
首先,通过 git stash list查看所有暂存的记录,每个记录会显示索引号(如 stash@{0})、分支信息和提交哈希值:
git stash list
输出示例:
stash@{0}: WIP on master: 52b18ee Add new feature
stash@{1}: WIP on develop: 05c3f27 Fix bug
此步骤可帮助确认暂存记录的存在及顺序。
二、查看特定 stash 的内容
若需确认某个 stash 的具体修改内容,可使用:
git stash show stash@{n} # 查看概要
git stash show -p stash@{n} # 查看完整差异(补丁格式)
例如:
git stash show -p stash@{0}
这会显示该 stash 中所有修改的文件及具体变更内容。
三、恢复 stash 中的修改
1. 恢复最新 stash
git stash apply # 应用最新 stash,保留记录
git stash pop # 应用并删除最新 stash
2. 恢复指定 stash
通过索引号恢复特定记录:
git stash apply stash@{n} # 应用但不删除
git stash pop stash@{n} # 应用并删除
例如恢复 stash@{1}:
git stash apply stash@{1}
恢复后,修改会回到工作区,需手动提交。
四、处理恢复冲突
若恢复时出现冲突(如后续修改与 stash 内容重叠),需手动解决:
-
打开冲突文件,按
<<<<<<<、=======、>>>>>>>标记编辑内容。 -
执行
git add <文件>标记冲突已解决。 -
提交修改:
git commit。
五、特殊情况处理
1. 恢复被清除的 stash
若误执行 git stash clear清空记录,可尝试:
git fsck --lost-found # 查找未引用的对象
git log --graph --oneline --decorate $(git fsck --no-reflog | awk '/dangling commit/ {print $3}')
根据输出的提交哈希值,手动恢复:
git checkout <commit-hash> -- <文件路径>
此方法适用于找回已丢失的 stash 内容。
2. 恢复单个文件
若需从 stash 中提取特定文件:
git checkout stash@{n} -- <文件路径>
例如恢复 src/main.js:
git checkout stash@{0} -- src/main.js
此操作不会影响其他文件。
六、最佳实践建议
-
添加描述信息:暂存时通过
-m参数添加注释,便于后续识别:git stash save "描述信息" -
定期清理:使用
git stash drop删除无用记录,或git stash clear清空全部。 -
分支操作:复杂场景下,可基于 stash 创建新分支调试:
git stash branch <分支名> stash@{n}
通过以上步骤,可高效找回和管理 git stash中的本地修改。若需进一步操作细节,可参考 Git 官方网页或相关教程。
6万+

被折叠的 条评论
为什么被折叠?



