赞
踩
本文的实践场景是基于目前项目组在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 pull
和git push -u origin dev
,再次查看项目提交分支图。
如此往复,多轮提交之后项目提交分支图将会变得越来越复杂,难以判断某个功能是属于哪一次的提交结果,经过四轮交替提交并执行git merge main
合并到主分支之后,使用git log --all --graph --decorate --oneline
查看分支图。
为了解决上述使用git pull
和git 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 dev
和git push -u origin dev
,项目提交分支图如下所示:
user1和user2多次进行修改与代码提交,项目提交分支图依旧十分简洁。
将dev分支合并到main分支。
如果在项目开发的过程中多人共同维护和修改同一个分支,为了避免产生不必要的分支合并操作,产生复杂的项目提交分支图,使用git pull --rebase
而不是git pull
,同时在将开发分支合并到主分支时,考虑采用git rebase
而不是git merge
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。