我正在做一些非常简单的错误。我正在尝试准备一个普通的补丁文件,所以我可以重新应用一些更改:
$ git diff > before $ git diff something_here > save.patch $ git checkout . $ patch < save.patch $ git diff > after $ diff before after $
something_here 空白 它几乎可以工作,但文件名不正确。我想我只是缺少一些选择。
something_here
在现实生活中,我将在结帐后进行合并,所以补丁可能会在那里失败,但你明白我的意思。
在这里编辑 我的错,因为我提出了错误的问题。实际的问题是,如果可能的话,我想保存我的更改,进行合并,然后重新应用更改?我问错了,因为我 习惯 使用补丁来解决这类问题,git diff看起来这就是它想要我做的。
git diff
查尔斯贝利的 评论 有正确的答案。对我来说, git-apply 是正确的做法(git-stash 看起来比我需要的更重,并且 rebase 和 bundles 绝对超出了我目前的技能水平。)我将接受 Charles 给出的答案(因为你不能接受评论)。感谢所有的建议。
编辑,6 年后 正如任何熟悉该主题的人都知道,我高估了git stash. 几乎每天,我都会使用以下顺序:
git stash
$ git stash $ git merge $ git stash pop
编辑,再过 5 年, 我基本上已经放弃了git apply,甚至没有使用git stash太多。 git rebaseFTW。
git apply
git rebase
如果要使用补丁,则需要删除a/ b/git 默认使用的前缀。您可以使用--no- prefix选项执行此操作(您也可以使用补丁-p选项执行此操作):
a/
b/
--no- prefix
-p
git diff --no-prefix [<other git-diff arguments>]
但通常情况下,直接使用更容易git diff,然后使用输出馈送到git apply.
大多数时候我尽量避免使用文本补丁。通常一个或多个临时提交与 rebase 相结合,git stash并且捆绑更易于管理。
对于您的用例,我认为这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