git - 我怎样才能让 git am/git apply 像补丁命令一样工作 "fuzzy"

标签 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

如果我不必运行命令行补丁并且可以将其作为 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/

相关文章:

git - 如何使用 git 获取项目的最新版本?

git - 在 Eclipse 中文件上的棕色星号图标是什么意思?

node.js - Gulp 将 Node 应用的 dist 文件夹部署到 Heroku

不在 git 目录中的 git pull

git - 何时将 --keep-cr 与 am 一起使用以及它是在哪个版本的 git 中引入的?

svn - Git 格式补丁与 svn 兼容?

git - git format-patch 输出的第一行是什么?

git - 查看单个文件的差异时如何查看 tig 中的完整提交差异?