如果我运行
git format-patch -1 stash@{0}
Git没有创建任何文件就悄悄地返回了,为什么会这样?我该如何以与 git am
兼容的格式保存一个暂存区?
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
stash@{0}
表示法。 - UncleZeiv你可以尝试一下
git stash show -p > ~/Desktop/stash.patch
这将为最新的修补程序和原始父级在您的桌面上生成一个补丁文件。
在git-stash文档中的show选项下进行了描述。
git am
兼容的补丁的方法,而且我对发生了什么很好奇。 - UncleZeivgit am
有关联,还是可以使用git apply
? - Kelvin我可以想到两种方法。
解决方案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:如何为合并创建补丁?以获取更多详细信息。
git stash -u
进行隐藏文件,那么 git stash show -p
将无法工作。
stash@{0}
,因为git stash list
在我的电脑上显示它是这个名称。只使用stash{0}
会返回一个关于修订版本不存在的错误。但我不知道为什么它不起作用。 - jonescb1.6.6
。 - UncleZeiv{
和}
。当我使用zsh或fish时,就会发生这种情况。然后变成了git format-patch -1 stash@\{1\} > mypatch.txt
。 - renoirb