首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我能从git-diff得到补丁兼容的输出吗?

我能从git-diff得到补丁兼容的输出吗?
EN

Stack Overflow用户
提问于 2011-01-06 08:39:04
回答 5查看 115.9K关注 0票数 176

我正在做一件非常简单的错误的事情。我正在尝试准备一个普通的补丁文件,这样我就可以重新应用一些更改:

代码语言:javascript
复制
$ git diff > before
$ git diff something_here > save.patch
$ git checkout . 
$ patch < save.patch
$ git diff > after
$ diff before after
$

如果something_here为空,它几乎可以正常工作,但文件名不正确。我想我只是我错过了一些选择。

在现实生活中,我将在签出后进行合并,所以补丁可能会在那里失败,但你知道我在说什么。

编辑这里是我的错,因为我问错了问题。实际的问题是,如果可能的话,我想保存我的更改,进行合并,然后重新应用更改?我问错了,因为我习惯于使用补丁来解决这类问题,而git diff看起来就是想让我这么做。

查尔斯·贝利的评论有正确的答案。对我来说,git-apply是正确的做法(git-stash看起来比我需要的更重,rebasing和bundles绝对超出了我目前的技能水平)。我接受Charles的回答(因为你不能接受评论)。谢谢你所有的建议。

编辑,6年后正如任何熟悉这个主题的人都知道的那样,我高估了git stash的难度。几乎每天,我都会使用以下顺序:

代码语言:javascript
复制
$ git stash
$ git merge
$ git stash pop
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-06 08:50:51

如果你想使用补丁,你需要删除git默认使用的a/ b/前缀。您可以使用--no-prefix选项(也可以使用补丁的-p选项执行此操作):

代码语言:javascript
复制
git diff --no-prefix [<other git-diff arguments>]

不过,通常使用直接的git diff,然后使用输出馈送到git apply会更容易。

大多数时候,我尽量避免使用文本补丁。通常,一个或多个临时提交与rebase、git stash和bundle相结合更容易管理。

对于您的用例,我认为stash是最合适的。

代码语言:javascript
复制
# save uncommitted changes
git stash

# do a merge or some other operation
git merge some-branch

# re-apply changes, removing stash if successful
# (you may be asked to resolve conflicts).
git stash pop
票数 151
EN

Stack Overflow用户

发布于 2011-01-06 08:58:23

只需使用-p1:在--no-prefix中无论如何都需要使用-p0,所以您可以省略--no-prefix而使用-p1

代码语言:javascript
复制
$ git diff > save.patch
$ patch -p1 < save.patch

$ git diff --no-prefix > save.patch
$ patch -p0 < save.patch
票数 239
EN

Stack Overflow用户

发布于 2011-01-06 08:57:45

git diffs在文件路径前面添加了一个额外的路径段。您可以通过指定-p1 with patch来删除路径中的此条目,如下所示:

代码语言:javascript
复制
patch -p1 < save.patch
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4610744

复制
相关文章

相似问题

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