gitlab中fork项目向源项目merge过程中的conflict问题

前段时间使用gitlab管理项目,遇到这样的问题,我fork了项目组长建立的项目,其中:
组长项目地址:http://192.168.1.1:8000/LOL/demaxiya.git 或者 git@192.168.1.1:LOL/demaxiya.git。
我的项目地址:http://192.168.1.1:8000/OW/demaxiya.git 或者git@192.168.1.1:LOL/demaxiya.git。
显然这是在服务器上的远程仓库,主分支都是master,使用git clone到本地,做了一部分开发后提交更新到我的远程仓库,然后组长要求我将更新合并到他的项目中,谁知出现了conflict问题,原因是组长也在自己的仓库上提交了更新,必须解决冲突之后才能发出合并请求。同步fork主要参考https://gaohaoyang.github.io/2015/04/12/Syncing-a-fork/,大致跟该同学写的一样,但是我自己又加了处理冲突的过程。

一、同步fork

先查看远程仓库git remote -v,发现只有我自己的,其中origin是地址别名,可随意根据git remote add 地址 命令随意命名

origin git@192.168.1.1:OW/demaxiya.git (fetch)
origin git@192.168.1.1:OW/demaxiya.git (push)

添加组长的仓库,也是我要时刻同步的上游仓库,同样适用命令:

git remote add upstream http://192.168.1.1:8000/LOL/demaxiya.git

从组长仓库fetch分支和提交点,git会自动生成upstream/master
如果现在不在主分支master上使用git checkout master切换回来,然后执行:

git fetch upstream

这里就会在本地新建一个文件夹upstream,组长的master位于其下。然后使用git merge upstream/master命令,该命令是本地master和该master合并,这时冲突就产生了,显然我们俩各自更改了同一个文件。需要手动同步这个文件。

二、解决冲突

一点点去代码里找不同很麻烦,这里有个很好用的第三方文本比较合并工具meld,事实上Mac自带很多merge tool我会乱说(比如opendiff tortoisemerge emerge vimdiff),可以集成在git里使用,如果你是Linux系统:

$ opt-get install meld

如果你跟我一样是MacOS系统,那就顺便介绍另外一个软件包快速安装工具homebrew,d打开Mac终端,输入如下命令:

/usr/bin/ruby -e "$(curl -fsSL http://raw.githubusercontent.com/Homebrew/install/master/install)"

使用 git config --global merge.tool meld 使它作为git的默认合并工具

remote: Counting objects: 11, done.
63Git Tutorials
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From git.server.com:project
* branch
master -> upstream/master
Auto-merging src/wow.c
CONFLICT (content): Merge conflict in src/wow.c
Automatic merge failed; fix conflicts and then commit the result.

执行git status命令发现哪些文件做了修改,发现wow1.java和wow2.java有冲突。

$ git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff
Merging:
src/wow1.java
src/wow2.java

Normal merge conflict for 'src/wow1.java':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (meld): 
//在这里按回车键开始在meld的帮助下解决冲突
Normal merge conflict for 'src/wow2.java':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (meld): 
//同上

再次执行git merge upstream/master获得成功,当然还没有完事,这只是在本地冲突解决了,还得更新到组长的远程master上不是,由于组长的master的权限是protected,因此直接git push肯定不行,我是登录到项目的gitlab中,使用merge requests发出我的master和他的master合并请求,然后他看到之后觉得没问题接受就行了。

附表是常用的git命令:

这里写图片描述

以上命令参考http://blog.csdn.net/wangbaochu/article/details/49470453

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值