使用git fetch和git merge手动解决一次pull request冲突

问题提出

github上的一次 pull request 出现了 conflicts ,需要解决合并冲突:

01 pull request出现冲突

冲突的内容主要是新增功能的代码和修改的注释:

02 conflict展示-新增内容

03 conflict展示-修改注释

问题思考

由于之前没有更新分支,同时又提交了分支中的代码,而git不能在不丢失提交的情况下对远程库进行修改。

解决思路:把原仓库的 master 分支 fetch 到本地,merge 后再 push

问题解决

设置原仓库地址

原仓库的 master 分支和本地的 jellyfishmix 分支发生了冲突,我们需要把原仓库的 master 分支拉取到本地,才能进行后续处理。

第一步,需要先设置原仓库的地址。

git remote add [原仓库的名字,可自定义] git@github.com:xxse/xx.git

例如本文中使用:

git remote add gpake/qiniu-wxapp-sdk git@github.com:gpake/qiniu-wxapp-sdk.git

原仓库的地址在本地中就有了记录,给原仓库地址起的名字叫 “gpake/qiniu-wxapp-sdk”

拉取原仓库master分支

使用 pull 拉取原仓库的 master 分支:

git pull gpake/qiniu-wxapp-sdk master:jellyfishmix

提示:pull 的格式(参考自 git pull命令的用法

git pull <远程仓库名> <远程分支名>:<本地分支名>

git pull拉取远程分之后会与本地分支进行合并

04 git remote, git pull

看到执行结果中提示:! [rejected] master -> jellyfishmix (non-fast-forward)

此提示说明无法将原仓库的master分支与本地的jellyfishmix进行合并,原因分析可见:Git错误non-fast-forward

解决本地分支与原仓库master分支的冲突

解决此问题的两步操作:

  1. git fetch 把远程分支拉取到本地
  2. git merge 与本地分支合并(如果有冲突就要解决冲突后再合并)

本文中,博主执行:

git fetch gpake/qiniu-wxapp-sdk master
git merge FETCH_HEAD jellyfishmix

05 git fetch, git merge

执行结果提示:Automatic merge failed; fix conflicts and then commit the result.

最初考虑使用 rebase 解决此问题,关于 git rebase 的介绍请参考:Rebase 代替合并

但是 git rebase 存在危险性,详情请看上面链接的那篇文章.故决定不实用git rebase,而使用手动解决冲突的方式。

vi 编辑存在冲突的文件

06 vi 编辑conflicts

例如,存在冲突的位置:

<<<<<<< HEAD
        // qiniuShouldUseQiniuFileName 如果是 true,则文件的 key 由 qiniu 服务器分配(全局去重)。
=======
        // 如果是 true,则文件的 key 由 qiniu 服务器分配 (全局去重)。
>>>>>>> FETCH_HEAD

======= 上下是发生冲突的两个分支,我们要保留的是HEAD分支的内容,删除冲突位置HEAD分支以外的内容,变成如下:

        // qiniuShouldUseQiniuFileName 如果是 true,则文件的 key 由 qiniu 服务器分配(全局去重)

07 vi 编辑conflicts,手动删除冲突

:wq 保存退出

或者也可以使用图形化IDE的编辑器来编辑存在 conflicts 的文件。

将所有存在 conflicts 的文件均进行这样的手动操作。

08 将所有存在 conflicts 的文件均进行这样的手动操作

重新提交

执行 git commit

git commit -am '修复了与master分支的合并冲突'

执行 git push

git push origin jellyfishmix

09 执行git commit和git push

pull request 看一下 conflicts 是否已解决:

10 成功解决conflicts

成功解决 conflicts !

one more thing…

可选方案

文末附 在Git的PR(Pull Request)提示冲突无法merge合并的解决方案

11 可选方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JellyfishMIX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值