当我尝试使用:
执行补丁时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
我该如何解决这个问题?我正在获取包含错误的文件的名称,但不知道行(这是一个大文件)
也许有更好的方法来执行这样的补丁?
我负责处理我工作中的所有补丁。这种情况我已经发生过很多次了。补丁不支持合并。发生这种情况的原因是因为主分支有补丁没有考虑到的更改,这阻止了它正确地打补丁。根据我的经验,这可能是由以下几个原因引起的:
- 制作补丁的人未能将master分支拉到他们的开发分支并将master重新base到他们的开发分支上。
- 由于冲突太多,在人员拔出补丁和应用补丁之间,对主分支进行了足够的更改,以阻止补丁应用。
- 此人打错了补丁。
这是我最成功的流程。(这是假设这个人正在开发一个分支而不是master)
- 确保你已经添加了所有的文件并提交了所有的更改。git checkout master
- git拉
- git checkout{开发分支} git rebase master(这将使开发分支跟上master的速度)
- git checkout -b{提交分支}master git merge—squash—no-commit{开发分支}
- git commit -am " commit Comment Here"(注意:这个commit Comment将是补丁的名称)
确保您的补丁与原始主分支保持最新。发送那个补丁,希望这个补丁在主服务器上做了太多的更改之前被应用。
你需要做一个3-way合并:
git am -3 0001-someFile.patch
git mergetool -t meld