github上的一次 pull request
出现了 conflicts
,须要解决合并冲突:html
冲突的内容主要是新增功能的代码和修改的注释:git
因为以前没有更新分支,同时又提交了分支中的代码,而git不能在不丢失提交的状况下对远程库进行修改。github
解决思路:把原仓库的 master
分支 fetch
到本地,merge
后再 push
bash
原仓库的 master
分支和本地的 jellyfishmix
分支发生了冲突,咱们须要把原仓库的 master
分支拉取到本地,才能进行后续处理。服务器
第一步,须要先设置原仓库的地址。app
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"fetch
使用 pull
拉取原仓库的 master
分支:spa
git pull gpake/qiniu-wxapp-sdk master:jellyfishmix
复制代码
提示:
pull
的格式(参考自 git pull命令的用法).netgit pull <远程仓库名> <远程分支名>:<本地分支名> 复制代码
git pull拉取远程分以后会与本地分支进行合并
看到执行结果中提示:! [rejected] master -> jellyfishmix (non-fast-forward)
此提示说明没法将原仓库的master分支与本地的jellyfishmix进行合并,缘由分析可见:Git错误non-fast-forward
解决此问题的两步操做:
git fetch
把远程分支拉取到本地git merge
与本地分支合并(若是有冲突就要解决冲突后再合并)本文中,博主执行:
git fetch gpake/qiniu-wxapp-sdk master
git merge FETCH_HEAD jellyfishmix
复制代码
执行结果提示:Automatic merge failed; fix conflicts and then commit the result.
最初考虑使用 rebase
解决此问题,关于 git rebase
的介绍请参考:Rebase 代替合并
可是 git rebase
存在危险性,详情请看上面连接的那篇文章.故决定不实用git rebase,而使用手动解决冲突的方式。
vi
编辑存在冲突的文件
例如,存在冲突的位置:
<<<<<<< HEAD
// qiniuShouldUseQiniuFileName 若是是 true,则文件的 key 由 qiniu 服务器分配(全局去重)。
=======
// 若是是 true,则文件的 key 由 qiniu 服务器分配 (全局去重)。
>>>>>>> FETCH_HEAD
复制代码
=======
上下是发生冲突的两个分支,咱们要保留的是HEAD分支的内容,删除冲突位置HEAD分支之外的内容,变成以下:
// qiniuShouldUseQiniuFileName 若是是 true,则文件的 key 由 qiniu 服务器分配(全局去重)
复制代码
:wq
保存退出
或者也可使用图形化IDE的编辑器来编辑存在 conflicts
的文件。
将全部存在 conflicts
的文件均进行这样的手动操做。
执行 git commit
git commit -am '修复了与master分支的合并冲突'
复制代码
执行 git push
git push origin jellyfishmix
复制代码
去 pull request
看一下 conflicts
是否已解决:
成功解决 conflicts
!
文末附 在Git的PR(Pull Request)提示冲突没法merge合并的解决方案