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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我做了一件很简单的错事。我正在准备一个普通的补丁文件,以便重新应用一些更改:

$ 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应用是正确的选择(git-stash看起来比我所需要的更重,而且重定位和打包肯定超出了我目前的技能水平)。

任何熟悉这个问题的人都知道,我高估了git stash。差不多每天,我都会使用以下顺序:

$ git stash
$ git merge
$ git stash pop
提问于
用户回答回答于

如果要使用修补程序,则需要删除a/b/默认情况下,git使用的前缀。你可以用--no-prefix选项(也可以使用修补程序的-p(备选方案):

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

不过,通常情况下,直接使用比较容易。git diff,然后使用要输入的输出。git apply...

大多数时候,我尽量避免使用文本补丁。通常一个或多个临时提交与重基相结合,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
用户回答回答于

就用-p1:需要使用-p0--no-prefix无论如何,你可以省去--no-prefix和使用-p1:

$ git diff > save.patch
$ patch -p1 < save.patch

$ git diff --no-prefix > save.patch
$ patch -p0 < save.patch

扫码关注云+社区