如果我跑
git format-patch -1 stash@{0}
git以静默方式返回而不创建任何文件。为什么会这样?如何以与git am
兼容的格式保存藏匿处?
答案 0 :(得分:4)
这似乎是因为存储提交表示为合并(在其父级和当时的索引状态之间),并且合并提交中的format-patch
不执行任何操作。
如果你说
git format-patch stash@{0}{,^}
然后它会在藏匿处和每个父母之间吐出补丁。
为了说明,这就是隐藏的样子:
* 99aedb8 (refs/stash) WIP on master: 668ff36 initial commit
|\
| * 6b8d77f index on master: 668ff36 initial commit
|/
* 668ff36 (HEAD, master) initial commit
答案 1 :(得分:1)
你可以尝试
git stash show -p > ~/Desktop/stash.patch
这将在桌面上生成最新补丁和原始补丁的补丁文件。
在show选项<{p>下的documentation of git-stash中描述
答案 2 :(得分:0)
我可以想到两种方式。
解决方案1:从藏匿处创建分支。这种方式违背了存储功能的最初目的,即避免必须创建单独的分支。
解决方案2:在存储之前,将对跟踪文件的所有更改添加到索引中。存储后,运行
git format-patch 'stash@{0}^1'..'stash@{0}^2'
将HEAD与索引进行比较(在创建存储时)。
我不确定为什么你不能将文件保持未添加到索引并运行
git format-patch 'stash@{0}^1'..'stash@{0}'
这似乎是一回事。存储提交对象必须有一些特殊的东西。在任何情况下,添加到索引都会记录存储的第二个父级(索引提交)中的更改,从而绕过存储提交的问题。
其他说明:
对于合并提交,git format-patch -1
将始终为空(存储是合并提交的特殊情况)。我不完全确定为什么会这样,但请参阅Git: How to create patches for a merge?了解更多细节。
答案 3 :(得分:-1)
如果您的文件使用git stash -u
隐藏,则git stash show -p
无效