我怎样才能使git am/git像patch命令一样应用"模糊"工作

EdC*_*EdC 31 git format-patch

我一直在使用git-format-patch和git-am将更改从一个存储库应用到另一个存储库.文件结构是相同的,但我应用的存储库中有一些更改,这会导致大多数补丁失败.但是,大多数补丁并不适用于线号中的一点点模糊性.

至于我能说出git-am apply一个非常严格的解释,所以完全拒绝所有这些补丁.

所以我的工作流程已成为

$ git am ../the-patch.patch
# Fails because the patch doesn't apply cleanly
$ patch -p1 < ../the-patch.patch
# Applies most of the hunks, leaves .rej files for the ones that conflict
# Fix the conflicting hunks manually
$ git am --continue
Run Code Online (Sandbox Code Playgroud)

如果我不必运行命令行补丁并且可以将其作为am命令的一部分发生,那将是很好的.

使用该--reject标志运行似乎会创建一个.rej文件,其中包含文件中的所有文件,如果有任何冲突,这不是我想要的.

使用--3way标志运行失败

fatal: sha1 information is lacking or useless (the-file.java).
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Run Code Online (Sandbox Code Playgroud)

我认为是因为这个基于的变更集不在我正在合并的存储库中.

有没有办法git-am apply像原始补丁命令那样使用模糊匹配制作补丁,只创建包含失败的帅哥的.rej文件?

Cés*_*eta 5

您可以执行以下操作:

git am /path/to/some.patch
patch -p1 < /path/to/some.patch
git add .
git am --continue
Run Code Online (Sandbox Code Playgroud)

这将应用补丁并保留提交消息等。

  • 效果很好!所以,patch 命令是你的朋友。使用 git add 时要小心。- 您最终可能会添加 .orig 文件(因此最好添加相应的文件而不是 . ) (2认同)

小智 0

这符合功能请求的要求。要确定这一点,请加入 Git 邮件列表 (git@vger.kernel.org) 并阅读一段时间以了解其文化。同时,按照上述建议准备之前/之后的文档,以澄清您的想法。

当您准备好后,请在列表中介绍自己并简洁地解释您的想法。请务必解决您的提案的效果是否可以通过其他方式充分实现的问题。如果您收到鼓励的话,请跟进更详细的文档。有了提案的反馈,您可能会决定继续提交功能请求错误,或者您可能会发现自己可以创建补丁以供考虑。