Git 合并 patch 时的冲突处理一例
来源:互联网 发布:世界软件病毒排行榜 编辑:程序博客网 时间:2024/06/14 22:55
几个新手刚刚开始接触 Git,为了维护核心仓库的“纯洁”,避免太多无关信息被误提交进仓库(再次批评一些图形化工具默认的“Select All”),采用了核心仓库只读,邮件提交 patch,审核后再提交的工作流程。
期间有时会遇到合并冲突,正常的原因一般是未及时下载新版本产生了冲突,特殊一点的原因是手工修改 patch 内容导致的。有时候看注释写得不够准确,忍不住就改了,有时候是 Geany 保存时自动去除了 patch 原文中的行尾空格,有时候是文件回车格式、BOM 等变动了,总之合并 patch 的时候,如果生成 patch 的“原稿”找不到,一般就产生了冲突,比如:
$ git am 0001-BUG-Sybase.patchApplying: CHG: 读取Sybase如果时间为空,设置默认时间的修改error: patch failed: source.php:38error: source.php: patch does not applyPatch failed at 0001.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".
刚开始一看有些懵,因为没有任何冲突在哪里的提示,后来找到一种方法,am 操作出问题后先手工 apply:
$ git apply --reject 0001-BUG-Sybase.patchChecking patch source.php...error: while searching for: // 注释 // 以下为几行代码片断error: patch failed: source.php:38Applying patch source.php with 1 rejects...Rejected hunk #1.
这样,就把没有冲突的文件先合并了,剩下有冲突的作了标记。先看输出,error: while searching for: 说明是这段代码有冲突,error: patch failed: source.php:38 指明了产生冲突的代码片断的开始行号,相应的,patch 中应该有这么一段:
diff --git a/source.php b/source.phpindex 8770441..4e77b8a 100644--- a/source.php+++ b/source.php@@ -38,27 +38,23 @@ class Site extends Module // 注释 // 以下为几行代码片断
同时,还会产生一个 source.php.rej 文件,里面也是上面这段因为冲突无法合并的代码片断。
现在,在这段代码中查找冲突原因,并对文件进行修改,source.php.rej 参考完了可以删掉。改好之后,用 git add 把 source.php 添加到缓冲区,同时也要把其他没有冲突合并成功了的文件也加进来,因为在作 apply 操作的时候他们也发生了变化:
$ git add source.php$ git add 其他 apply 进来的文件们
最后:
$ git am --resolvedApplying: CHG: 读取Sybase如果时间为空,设置默认时间的修改
大功告成。
中间如果处理乱了,用 git reset 恢复即可,所以合并 patch 在一个“干净”的分支上处理更好。
- Git 合并 patch 时的冲突处理一例
- Git 合并 patch 时的冲突处理一例(转载)
- Git 合并 patch 时的冲突处理一例
- Git 合并 patch 时的冲突处理一例
- Git 合并 patch 时的冲突处理一例
- Git am 合并 patch 时的冲突处理
- git冲突时的处理
- git---分支合并冲突处理(conflict)
- git分支合并,及冲突处理
- git: 如何用git-am来合并git format-patch生成的一系列的patch.
- git: 如何用git-am来合并git format-patch生成的一系列的patch.
- [GIT] 如何用git-am来合并git format-patch生成的patch
- git:如何用git-am来合并git format-patch生成的patch
- git apply patch解决冲突
- Git am PATCH冲突解决
- git am PATCH 失败的处理方法
- git am PATCH 失败的处理方法
- git am patch 失败的处理方法
- C#获取qq号码
- 【VIP】RAC中VIP2异常转移的解决方法
- 试一下看看
- 使用jqMobi开发app基础:Side Menu
- 连接池 druid(阿里巴巴的框架)
- Git 合并 patch 时的冲突处理一例
- jsp获取项目路径
- 2014 年的互联网泡沫
- 寒假学习 第一天 (QT学习)
- 友情检测北京某大学网站
- 深入理解java虚拟机【Java虚拟机垃圾收集器】
- 电子游戏与自由主义
- CoInitialize浅析一
- 深入理解java虚拟机【Java Class类文件结构】