You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git新手求助:如何在未提交的暂存版本间切换?

Git新手求助

我正在编写一个新文件,内容如下:

Version1: A guy walks into a bar
          [here I tell my story]

此时我对内容满意但想做些修改,于是执行以下命令暂存更改:

$ git stash save -u 'version1: a guy walks'

收到提示信息:

Saved working directory and index state On dev_story: version1: a guy walks

接着我修改内容:

Version2: A nice dude walks into a bar
          [here I tell a slighly different story]

并再次执行暂存命令:

$ git stash save -u 'version2: a dude walks'

收到提示信息:

Saved working directory and index state On dev_story: version2: a dude walks

查看暂存列表显示:

$ git stash list
stash@{0}: On dev_story: version2: a dude walks
stash@{1}: On dev_story: version1: a guy walks

我想向朋友展示并对比Version1和Version2,但尝试应用stash@{0}时无法显示对应内容,已执行的操作:

$ git stash show stash@{0}  //无报错,仅换行

$ git stash apply stash@{0} 

test/story.txt already exists, no checkout
error: could not restore untracked files from stash

解决方法

1. 备份当前工作区文件(如有需要)

如果当前工作区的test/story.txt还有需保留的内容,先复制一份到其他路径备份。

2. 查看stash内容(无需恢复)

仅需查看内容对比的话,不用恢复stash,直接用以下命令查看完整文件内容:

  • 查看Version2(stash@{0}):
git stash show -p stash@{0}
  • 查看Version1(stash@{1}):
git stash show -p stash@{1}

-p参数会输出文件的完整文本内容,方便直接对比。

3. 导出两个版本文件进行对比

如果需要把两个版本都导出到本地:

  • 先导出Version1:
git stash apply stash@{1}
cp test/story.txt story_v1.txt
git stash drop stash@{1}
rm test/story.txt
  • 再导出Version2:
git stash apply stash@{0}
cp test/story.txt story_v2.txt
git stash drop stash@{0}
rm test/story.txt

此时本地会生成story_v1.txt和story_v2.txt,可直接对比内容。

补充说明

你用了git stash save -u参数,会把未跟踪文件(未执行git add的文件)存入stash。恢复时若工作区已有同名文件,Git会拒绝覆盖以避免数据丢失,所以恢复前需确保工作区无冲突文件,或提前备份现有内容。


内容的提问来源于stack exchange,提问作者pylos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:51:19