如果我运行
git format-patch -1 stash@{0}git静默返回,不创建任何文件。这一切为什么要发生?如何以与git am兼容的格式保存存储
发布于 2011-01-05 01:42:19
这似乎是因为stash提交被表示为合并(在其父节点和索引状态之间),而合并提交上的format-patch什么也不做。
如果你说
git format-patch stash@{0}{,^}然后,它将在储藏库和每个父级之间吐出补丁。
为了说明起见,下面是stash的样子:
* 99aedb8 (refs/stash) WIP on master: 668ff36 initial commit
|\
| * 6b8d77f index on master: 668ff36 initial commit
|/
* 668ff36 (HEAD, master) initial commit发布于 2011-01-05 02:16:36
你可以试一试
git stash show -p > ~/Desktop/stash.patch这将在您的桌面上为最新的修补程序和原始的父修补程序生成一个修补程序文件。
在show选项下的documentation of git-stash中描述
发布于 2011-08-17 04:42:37
我能想到两种方法。
解决方案1:从stash创建一个分支。这种做法违背了stash特性的最初目的,即避免创建单独的分支。
解决方案2:在存储之前,将对跟踪文件的所有更改添加到索引中。在存储之后,运行
git format-patch 'stash@{0}^1'..'stash@{0}^2'它将HEAD与索引进行比较(在创建stash时)。
我不明白为什么您不能不将文件添加到索引中,然后运行git format-patch 'stash@{0}^1'..'stash@{0}'
这似乎是一回事。stash commit对象一定有什么特别之处。在任何情况下,添加到索引中都会记录存储的第二个父级(索引提交)中的更改,从而绕过存储提交的问题。
其他注意事项:对于合并提交,git format-patch -1将始终为空(存储是合并提交的特例)。我不完全确定这是为什么,但请参阅Git: How to create patches for a merge?了解更多细节。
https://stackoverflow.com/questions/4596583
复制相似问题