我希望基于旧藏匿的差异创建.patch
文件,我可以使用git stash show -p stash@{2}
我试过了,但没有运气:
git format-patch stash@{2} --stdout > file.patch
我认为它会像正常提交一样工作吗?对于最有可能超级厚重的道歉。
谢谢!
答案 0 :(得分:1)
git stash show -p
的输出本身就是一个有效的补丁。您可以直接使用它:
git stash show -p stash@{2} > file.patch
答案 1 :(得分:1)
每the git format-patch
documentation,如果您指定一次提交, 1 则:
- 单个提交
醇>since
,指定通往当前分支的提示的提交,这些提交不在导致since
的历史记录中输出。
因此,format-patch
会尝试查找“提交当前分支的提示”(HEAD
),这些提交既不是stash@{2}
也不是stash@{2}
的祖先。如果不知道实际的提交图,很难准确地说出这些提交,但如果图形看起来像这样:
... - o - o - * - * <-- HEAD=branch
|\
i-w <-- stash@{2}
然后format-patch
会创建一个包含标记为*
的两个提交的修补程序:它们是HEAD
中唯一未通过w
提交启动而删除的提交者向后工作。
如果图表看起来更像这样:
* <-- HEAD=branch
/
... - o - o - o - o <-- anotherbranch
|\
i-w <-- stash@{2}
然后再一次你会得到标记为*
的提交(这次提交一次,只是有点不同)。
(事实上,您获得与stash@{2}..HEAD
完全相同的提交,因为此gitrevisions
syntax表示format-patch
文档的第1项中的内容。
一种解决方案是继续format-patch
文档中的第2项:
- 通用修订版范围表达式(请参阅gitrevisions(7)中的“指定修订版本”部分)表示指定范围内的提交。
醇>
在这里,您只需要指定“在隐藏包中w
提交之前”到“w
提交本身”的提交,这只是stash@{2}^..stash@{2}
:
git format-patch [additional options like --stdout here] stash@{2}^..stash@{2}
由于这是一次提交,因此仅使用git show
(作为John Zwinck suggested)的唯一区别是补丁的精确格式化(format-patch
默认使邮箱样式补丁)。
或者,您可以始终使用git stash branch
将存储空间转换为“真正的分支”。如果需要,这会将存储的索引commit i
转换为实际提交,并在创建后恢复工作目录状态(以及未跟踪或所有文件状态,如果其中一个包含在存储中)从父提交开始的新分支,即隐藏包附加到的分支。提交生成的工作树,你有一个普通的分支,你可以用所有普通的分支操作(包括format-patch
)来操作。
1 请参阅some of my other descriptions about git "stash bags"以查看存储是一小堆提交,但请注意,名称stash@{2}
标识单个提交,特别是工作树提交在“藏匿袋”中。