4

当我尝试使用以下方法执行补丁时:

git am 0001-someFile.patch

但我收到此错误:

error: patch failed: src/***/file.c:459
error: src/***/file.c: patch does not apply
Patch failed at 0001 someFile.patch
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

我正在尝试使用以下方法手动合并冲突:

git mergetool --tool=meld

但我得到:

No files need merging

我怎么解决这个问题?我正在获取包含错误的文件的名称,但不知道该行(这是一个大文件)

也许有更好的方法来执行这种修补?

4

2 回答 2

1

我负责处理我工作中的所有补丁。这种情况我已经发生过很多次了。补丁无法合并。发生这种情况的原因是主分支有补丁没有考虑到的更改,这会阻止它正确打补丁。根据我的所有经验,这可能是由几件事引起的:

  • 制作补丁的人未能将 master 分支和 rebase master 放到他们的开发分支上。
  • 在此人拉取补丁和应用补丁之间,对主分支进行了足够的更改,以阻止由于太多冲突而应用补丁。
  • 那个人打错了。

这是我最成功的流程。(这是假设此人正在除 master 以外的分支上开发)

  1. 确保您已添加所有文件并提交所有更改。
  2. git结账大师
  3. git 拉
  4. git checkout {开发分支}
  5. git rebase master(这将使开发分支与 master 同步)
  6. git checkout -b {提交分支} master
  7. git merge --squash --no-commit {开发分支}
  8. git commit -am "Commit Comment Here" (注意:此提交评论将是补丁的名称)
  9. git format-patch origin..HEAD

这样可以确保您的补丁与原始主分支保持同步。发送该补丁,并希望在对主服务器进行太多更改之前应用该补丁。

于 2013-06-30T06:06:18.583 回答
0

您需要进行 3 路合并:

  git am -3 0001-someFile.patch

  git mergetool -t meld
于 2017-07-19T08:30:38.697 回答