使用git am在git补丁上出错

时间:2013-06-15 17:52:42

标签: linux git merge git-merge git-am

当我尝试使用以下代码执行修补程序时:

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

我该如何解决这个问题? 我得到了保存错误的文件的名称,但不知道该行(它是一个大文件)

也许有更好的方法来执行此类修补?

2 个答案:

答案 0 :(得分:1)

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

  • 制作修补程序的人未能将主分支和主服务器重新绑定到其开发分支上。
  • 在人员撤离和修补程序应用之间,对主分支进行了足够的更改,以便因冲突太多而停止应用补丁。
  • 此人打错了。

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

  1. 确保您已添加所有文件并提交所有更改。
  2. git checkout master
  3. git pull
  4. git checkout {development branch}
  5. git rebase master(这将使开发分支与master保持同步)
  6. git checkout -b {submission branch} master
  7. git merge --squash --no-commit {development branch}
  8. git commit -am“在此处提交注释”(注意:此提交注释将是修补程序的名称)
  9. git format-patch origin..HEAD
  10. 确保您的补丁与原始主分支保持同步。发送该补丁并希望在对主服务器进行太多更改之前应用补丁。

答案 1 :(得分:0)

您需要进行3向合并:

  git am -3 0001-someFile.patch

  git mergetool -t meld