执行Git stash后修改内容丢失,如何找回?
1. 临时保存当前工作区状态
当前工作区存在未提交的暂存文件、修改文件和未追踪文件,先将这些内容临时存入stash,避免后续操作冲突:
git stash push -m "temp_save_current_state"
2. 确认目标stash条目
执行命令查看所有stash记录,找到标注为On main: latest modification的条目(若刚执行完上一步,该条目编号通常为stash@{1}):
git stash list
3. 用临时分支安全恢复目标stash
创建临时分支隔离恢复操作,避免直接影响main分支:
git checkout -b recover_stash main git stash apply stash@{X} # 将X替换为目标stash的实际编号,如stash@{1}
若出现文件冲突(如.gitignore),手动打开冲突文件解决差异后,执行:
git add . git commit -m "recover stashed modifications"
4. 恢复临时保存的工作区内容
切回main分支,恢复第一步临时存入的内容:
git checkout main git stash apply stash@{0}
处理可能出现的冲突后,可删除临时分支:
git branch -D recover_stash
5. 验证恢复结果
通过以下命令确认所有修改已恢复:
git status git diff
关键说明
- 此前执行
git stash save时出现的Unlink of file 'music.db' failed错误,仅为本地文件被进程占用导致的工作区清理失败,stash已成功保存所有修改,可通过以下输出验证:
PS C:\Users\Administrator\Desktop\projects\songs> git stash show --stat
.gitignore | 4 ++--
app.py | 11 +++++++----
music.db | Bin 69632 -> 86016 bytes
static/css/musicPlayer.css | 1 +
static/css/styles.css | 4 +++-
templates/favorites.html | 2 ++
templates/layout.html | 8 ++++++--
templates/play.html | 27 +++++++++++++++++++--------
8 files changed, 40 insertions(+), 17 deletions(-)
内容的提问来源于stack exchange,提问作者Diwas

