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