我一直在使用 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
如果我不必运行命令行补丁并且可以将其作为 am 命令的一部分发生,那就太好了。
如果有任何冲突,使用 --reject
标志运行似乎会创建一个 .rej 文件,其中包含文件中的所有 hunk,这不是我想要的。
使用 --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.
我认为这是因为它所基于的更改集不在我要 merge 到的存储库中。
有什么方法可以像原始补丁命令一样使 git-am 应用
具有模糊匹配的补丁,并且只创建包含失败的 hunks 的 .rej 文件?
最佳答案
您可以执行以下操作:
git am /path/to/some.patch
patch -p1 < /path/to/some.patch
git add .
git am --continue
这将应用补丁并保留提交消息等。
关于git - 我怎样才能让 git am/git apply 像补丁命令一样工作 "fuzzy",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336440/