git多人协作修改同一分支的方案与实践

写在前面

本文的实践场景是基于目前项目组在git多人协作方面上遇到的问题,主要是针对多人同时修改同一分支造成的冲突,具体的示例和实践方法讲解借鉴了这篇博文

实践场景

目前我们的项目主分支是main分支,包含了现有的功能代码。但是现在客户提出了新的功能需求,我们新建了一个dev分支,用于开发新的功能,当新功能开发完毕并测试无误后合并到main分支上。该dev分支共由两个开发人员维护。
在这里插入图片描述

错误方法

当用户2根据功能需求写了一些代码之后,由于其他工作需要暂时离开,因此用户2尝试将现有工作推到远端dev分支。

git push -u origin dev
 ! [rejected]        dev -> dev (fetch first)
error: failed to push some refs to 
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

有人在user2提交代码之前已经进行了git push操作,OK!直接根据提示进行git pull

Merge branch 'dev' of ssh://xxxxxxxxxxxxxx/Xuzisen/git-learn into dev
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

提示分支合并,whatever,继续将代码上传dev分支git push -u origin dev

To ssh://xxxxxxxxxxxxxx/Xuzisen/git-learn.git
   a7e3cdb..4eacc7b  dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

查看此时的项目提交分支图如下
在这里插入图片描述
在user2提交之后,user1同样并不清楚user2已经对代码仓库进行了修改,重复上述操作进行git pullgit push -u origin dev,再次查看项目提交分支图。
在这里插入图片描述
如此往复,多轮提交之后项目提交分支图将会变得越来越复杂,难以判断某个功能是属于哪一次的提交结果,经过四轮交替提交并执行git merge main合并到主分支之后,使用git log --all --graph --decorate --oneline查看分支图。
在这里插入图片描述

解决方案

为了解决上述使用git pullgit push操作带来的分支图混乱问题,使用git pull --rebase origin dev进行本地仓库与远端仓库的同步。

  • git pull =git fetch + git merge
  • git pull --rebase = git fetch + git rebase

git pull --rebase会在代码commit之前将两个分支之间的差异保存下来,然后将远端分支同步到本地,然后再将刚刚保存的代码修改部分重新添加到已经同步的当前分支上。rebase参考
重新进行上述实验,user1首先提交了代码,而user2并不知道user1已经提交了代码,执行git pull --rebase origin devgit push -u origin dev,项目提交分支图如下所示:
在这里插入图片描述
user1和user2多次进行修改与代码提交,项目提交分支图依旧十分简洁。
在这里插入图片描述
将dev分支合并到main分支。
在这里插入图片描述

总结

如果在项目开发的过程中多人共同维护和修改同一个分支,为了避免产生不必要的分支合并操作,产生复杂的项目提交分支图,使用git pull --rebase而不是git pull,同时在将开发分支合并到主分支时,考虑采用git rebase而不是git merge

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值