手动编辑文件解决冲突_4.2.1 git am patch手动解决冲突的办法

工作中涉及通过git am合入patch,但是经常遇到合入失败,有冲突的问题,现在分享一个个人解决冲突的比较快的方法。

举例来说,本人从linux仓库随便format出来一个patch,合入肯定冲突,现在解决这个冲突。

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index f5cad42875e9..7e3c00bd9532 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -3093,7 +3093,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
        .port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
        .port_link_state = mv88e6352_port_link_state,
        .port_get_cmode = mv88e6185_port_get_cmode,
-       .stats_snapshot = mv88e6320_g1_stats_snapshot,
+       .stats_snapshot = mv88e6xxx_g1_stats_snapshot,
        .stats_set_histogram = mv88e6095_g1_stats_set_histogram,
        .stats_get_sset_count = mv88e6095_stats_get_sset_count,
        .stats_get_strings = mv88e6095_stats_get_strings,
cuibixuan@ubuntu:~/git/linux$ git format-patch -1 a6da21bb0eae459a375d5bd48baed821d14301d0

1.合入遇到冲突

cuibixuan@ubuntu:~/git/linux$ git am 0001-net-dsa-mv88e6xxx-Fix-statistics-on-mv88e6161.patch
Applying: net: dsa: mv88e6xxx: Fix statistics on mv88e6161
error: patch failed: drivers/net/dsa/mv88e6xxx/chip.c:3093
error: drivers/net/dsa/mv88e6xxx/chip.c: patch does not apply
Patch failed at 0001 net: dsa: mv88e6xxx: Fix statistics on mv88e6161
Use 'git am --show-current-patch' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

如上提示“patch does not apply”,说明patch不能合入,你可以解决问题后“git am --continue”继续,也可以“git am --skip”忽略,或者“git am --abort”停止合入。

2.git apply --reject导出冲突

$ git apply --reject 0001-net-dsa-mv88e6xxx-Fix-statistics-on-mv88e6161.patch
Checking patch drivers/net/dsa/mv88e6xxx/chip.c...
error: while searching for:
        .port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
        .port_link_state = mv88e6352_port_link_state,
        .port_get_cmode = mv88e6185_port_get_cmode,
        .stats_snapshot = mv88e6320_g1_stats_snapshot,
        .stats_set_histogram = mv88e6095_g1_stats_set_histogram,
        .stats_get_sset_count = mv88e6095_stats_get_sset_count,
        .stats_get_strings = mv88e6095_stats_get_strings,

此时git status会看到.rej结尾的文件,此文件即表示希望合入的代码。

d61cb7c24658dc8c24932c288a305fab.png

3.vim -O打开此文件和原文件

fae6382e792d16f44ea39d2ff8b08f1f.png

此时掌握几个命令:

ctrl+双w:左右界面切换;

/+字符串:在此文件搜索字符串匹配

shift+v:全选行;

shift+v,上下键:选多行

y:复制

p:粘贴

dd:删除行

活用如上快捷键,可实现从左侧粘贴对应内容,并复制到右侧文件,同时删除想要删除行;

如上修改步骤:

1)光标指向左侧文件+行,shift+v选中,y复制;

2)ctrl+ww到右侧文件,光标指向对应修改行,p粘贴;

3)光标指向希望删除行,dd删除;

4)保存文件;

4.git add修改文件

e433af209f81aa3d46dd3f3da1707d44.png

git add drivers/net/dsa/mv88e6xxx/chip.c

69b48c7262fccbb58aaf24d8a01feb25.png

5.git am --resolved解决冲突后合入。

如上,熟练后一般很快能解决冲突合入patch,比打开比对文件左右比对解决冲突再手动合入快很多,提高办公效率~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值