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
相关产品推荐
相关产品推荐

