Git结合SourceTree使用:卸载后保留feature分支stash及跨PC应用咨询
解答你的SourceTree与Git Stash相关疑问
嘿,刚好对Git stash和SourceTree的关系比较熟,来帮你理清这些问题:
1. Stash的存储位置与卸载SourceTree后的保留情况
首先明确一个核心点:Git的stash是完全本地存储的,和SourceTree这个GUI工具没有绑定关系!
- 它的实际存储位置是你本地仓库目录下的
.git/refs/stash文件(记录stash的引用),以及.git/logs/refs/stash(记录stash的操作日志),所有暂存的更改内容都存在本地机器的Git仓库里,根本不会上传到远程服务器。 - 所以你的猜测完全正确:卸载SourceTree后,只要你的本地仓库文件夹没被删除,所有stash都会原封不动保留。SourceTree只是Git的可视化操作工具,底层所有的stash管理都是Git本身在处理,卸载工具不会影响Git的本地数据。
2. 如何查看本地的stash
不管有没有SourceTree,你都可以通过两种方式查看:
- Git命令行方式:打开终端进入本地仓库目录,运行
git stash list,会列出所有已保存的stash条目,比如:
每个条目会显示stash对应的分支和备注,方便你识别。stash@{0}: On feature/user-profile: WIP: add avatar upload feature stash@{1}: On feature/user-profile: fix form validation bug - 重新安装SourceTree后查看:如果之后又装回SourceTree,打开对应的本地仓库,在左侧导航面板找到「Stashes」选项,就能看到所有本地存储的stash内容。
3. 除了创建补丁,迁移stash到另一台PC的方法
除了用SourceTree生成补丁,还有这几个更灵活的方法:
- 把stash转为临时分支推送到远程:
这是最稳妥的方式,步骤如下:- 在原机器的仓库中,把目标stash转为临时分支:
git stash branch temp-stash-branch stash@{0}(这里的stash@{0}是你要迁移的stash编号,从git stash list里能看到) - 把这个临时分支推送到远程服务器:
git push origin temp-stash-branch - 在目标PC上拉取这个分支:
git pull origin temp-stash-branch - 之后你可以把临时分支上的更改合并到你的feature分支,完成后再删除临时分支即可。
- 在原机器的仓库中,把目标stash转为临时分支:
- 直接复制Git的stash存储文件:
如果你能直接访问原机器的仓库文件夹,把.git/refs/stash和.git/logs/refs/stash这两个文件复制到目标PC对应仓库的.git目录下,然后在目标PC运行git stash list,就能看到迁移过来的stash了。注意要确保两台机器的Git版本尽量兼容,避免出现解析问题。 - 用Git命令行导出/导入stash:
这个和SourceTree的补丁原理一致,但更灵活:- 原机器导出stash为patch文件:
git stash show -p stash@{0} > my-feature-stash.patch - 把patch文件传到目标PC,进入对应仓库后运行
git apply my-feature-stash.patch,就能应用这个stash的更改了。
- 原机器导出stash为patch文件:
内容的提问来源于stack exchange,提问作者annepic




