小编典典

我可以从 git-diff 获得补丁兼容的输出吗?

all

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

$ 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 看起来比我需要的更重,并且 rebase 和
bundles 绝对超出了我目前的技能水平。)我将接受 Charles 给出的答案(因为你不能接受评论)。感谢所有的建议。

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

$ git stash
$ git merge
$ git stash pop

编辑,再过 5 年, 我基本上已经放弃了git apply,甚至没有使用git stash太多。 git rebaseFTW。


阅读 67

收藏
2022-08-01

共1个答案

小编典典

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

git diff --no-prefix [<other git-diff arguments>]

但通常情况下,直接使用更容易git diff,然后使用输出馈送到git apply.

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

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

# 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
2022-08-01