一张很经典的图:
当多人协同工作时,一般有一个master分支,用于将小伙伴代码合并到一起后的dev分支,基于dev分支创建的每位小伙伴各自分支如myBranch。
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- myBranch分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
开发提交
当你刚进入项目组,需要基于dev分支进行开发时,就要:(1)克隆代码 (2)基于dev分支,创建属于自己的分支 (3)基于自己分支开发,再提交到远端自己分支上
git clone ...
git checkout dev
git checkout -b myBranch//创建并切换到自己分支
--
进行开发ing...要提交代码了
git add .
gst
gc -m'首页ok'
gst
git push origin myBranch(缩写gp)
合并代码
小伙伴每天开发前,先git pull一下dev分支,保证基于最新的dev分支上进行编辑。
然并卵,如果小伙伴正开发时,发现dev分支上有新的提交,显示自己本地dev分支版本已落后。
解决:基于myBranch,将工作区改动与dev改动进行合并。具体方法见下面两种
方法一
先将自己工作区代码改动放到本地仓库,再将远端dev最新代码拉取到本地仓库,然后将dev合并到myBranch里。
若有冲突请在工作区解决好冲突。最后,将修改后的文件提交
//先将自己工作区代码改动放到本地仓
ga .
gst
gc -m'修改了某文件'
gst
//更新代码
git checkout dev
git pull origin dev(简写git pull)
//将dev合并到自己分支里
git checkout myBranch
git merge dev
gst
//若有冲突,修改冲突,再提交所修改的文件
git add 修改的文件
gst
gc -m'手动合并'
gst
gp
点评:对工作区来说,相当于先修改代码,再更新代码,即在旧的代码上进行编辑。容易产生冲突
方法二
先将工作区改动压入临时栈中,此时工作区干净,再更新工作区,然后将dev合并到myBranch中。
最后将之前的工作区改动弹出来,此时若有冲突,先解决冲突,再将修改的文件提交
git stash//将工作区改动压入栈中
//更新代码
git checkout dev
git pull
//将dev合并到myBranch里
git checkout myBranch
git merge dev
//弹出之前工作区改动
git stash pop
//若有冲突,解决冲突,并提交修改的文件
ga 某文件
gst
gc -m'合并代码'
gst
gp
点评:相当于先更新代码,再编辑,冲突少。且git stash pop查看有冲突的地方很方便
最后,由负责人将小伙伴分支上的代码,合并到dev,大功告成!