首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么git format-patch不适用于stashes?

为什么git format-patch不适用于stashes?
EN

Stack Overflow用户
提问于 2011-01-05 01:33:45
回答 4查看 1.3K关注 0票数 3

如果我运行

代码语言:javascript
复制
git format-patch -1 stash@{0}

git静默返回,不创建任何文件。这一切为什么要发生?如何以与git am兼容的格式保存存储

EN

回答 4

Stack Overflow用户

发布于 2011-01-05 01:42:19

这似乎是因为stash提交被表示为合并(在其父节点和索引状态之间),而合并提交上的format-patch什么也不做。

如果你说

代码语言:javascript
复制
git format-patch stash@{0}{,^}

然后,它将在储藏库和每个父级之间吐出补丁。

为了说明起见,下面是stash的样子:

代码语言:javascript
复制
*   99aedb8 (refs/stash) WIP on master: 668ff36 initial commit
|\  
| * 6b8d77f index on master: 668ff36 initial commit
|/  
* 668ff36 (HEAD, master) initial commit
票数 4
EN

Stack Overflow用户

发布于 2011-01-05 02:16:36

你可以试一试

代码语言:javascript
复制
git stash show -p > ~/Desktop/stash.patch

这将在您的桌面上为最新的修补程序和原始的父修补程序生成一个修补程序文件。

在show选项下的documentation of git-stash中描述

票数 1
EN

Stack Overflow用户

发布于 2011-08-17 04:42:37

我能想到两种方法。

解决方案1:从stash创建一个分支。这种做法违背了stash特性的最初目的,即避免创建单独的分支。

解决方案2:在存储之前,将对跟踪文件的所有更改添加到索引中。在存储之后,运行

代码语言:javascript
复制
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?了解更多细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4596583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档