Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t git格式修补程序用于存储?_Git_Patch_Git Stash - Fatal编程技术网

为什么';t git格式修补程序用于存储?

为什么';t git格式修补程序用于存储?,git,patch,git-stash,Git,Patch,Git Stash,如果我跑 git format-patch -1 stash@{0} git以静默方式返回,而不创建任何文件。为什么会发生这种情况?如何以与git am兼容的格式保存隐藏?这似乎是因为隐藏提交被表示为一个合并(在其父级和当时的索引状态之间),而合并提交上的format patch不起任何作用 如果你说 git format-patch stash@{0}{,^} 然后它会在藏匿处和每一个父母之间吐出补丁 为了便于说明,这是隐藏物的外观: * 99aedb8 (refs/stash) WI

如果我跑

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
你可以试试

git stash show -p > ~/Desktop/stash.patch
这将在桌面上为最新修补程序和原始父级生成修补程序文件

在“显示”选项下的中描述,我可以想出两种方法

解决方案1:从存储创建分支。这种方法违背了隐藏特性的最初目的,即避免创建单独的分支

解决方案2:在隐藏之前,将对跟踪文件的所有更改添加到索引中。藏好后,跑

git format-patch 'stash@{0}^1'..'stash@{0}^2'
它将头部与索引(创建隐藏时)进行比较

我不知道为什么不能让文件不添加到索引就运行
git格式修补程序'stash@{0}^1'..'stash@{0}'

看起来是一样的。stash commit对象肯定有什么特别之处。在任何情况下,添加到索引将记录隐藏的第二个父级(索引提交)中的更改,从而绕过隐藏提交的问题

杂项说明:
git格式补丁-1
在合并提交时始终为空(隐藏是合并提交的一种特殊情况)。我不完全确定这是为什么,但请参阅了解更多细节。

如果您的文件是使用
git stash-u
隐藏的,那么
git stash show-p
不起作用

我想您的意思是
stash{0}
相反,
git stash list
显示了这是我的名字。使用just stash{0}返回一个关于修订不存在的错误。我不知道为什么它不起作用。@jonescb:对,那只是一个打字错误,很抱歉。我应该提到的是,目前我必须使用git
1.6.6
。这也取决于你使用的shell,但有时你必须逃避
{
。当我使用zsh或fish时,它会发生在我身上。然后它变成了
git格式补丁-1 stash\{1\}>mypatch.txt
谢谢,我知道这一点,但我正在寻找一种方法来生成与
git am
兼容的补丁,另外,我很好奇到底发生了什么。@unclezeiv您是否与
git am
有某种联系,或者您是否可以使用
git apply
?您的推理是有道理的,但您提出的解决方案仍然给出了一个空的提交。如果您考虑了其他解决方案,请注意,我可以直接使用提交的sha ID,而不是
stash@{0}
表示法。