图解Git第二章:多人合作开发操作git

第1节:分支 = github项目的副本

1.1本节涉及概念:

概念 解释
分支 就是github项目的副本
本地分支 克隆项目到本地后,在本地上的项目副本
远程分支 远程仓库里的项目副本

1.2图解

【git clone后本地分支】

远程仓库现在有四个分支,git clone项目会默认创建一个本地master分支,与远程master分支关联。

在这里插入图片描述

【基于远程分支,创建本地分支】

图中“工作区/本地仓库”部分,哪个颜色在上面代表当前工作区正在使用哪个分支;
基于远程分支创建本地分支,会默认将当前本地分支切换到刚创建的本地分支上,所以图中蓝色分支feature-branch-1会在红色分支master上面。

在这里插入图片描述
【本地分支之间的切换】
在这里插入图片描述

1.3本节涉及git指令

指令 作用
git branch 查看本地所有分支
git branch -a 查看本地所有分支和远程所有分支
git checkout --track origin/branch_name 基于远程分支创建本地分支(创建成功后,本地分支名默认与远程分支同名,并且切换到新创建的本地分支)
git checkout --track origin/branch_name new_branch_name 基于远程分支创建本地分支,指定名字作为新创建的本地分支名
git checkout branch_name 切换本地分支

1.4对比同一项目不同分支下的区别

# 基于远程分支创建本地分支(默认使用远程分支名作为本地分支名)
git checkout --track origin/feature_branch_1
# 添加一个新文件a.txt
touch a.txt
# 保存并提交
git add .
git commit -m'创建了a.txt'
# 查看本地文件夹下的内容,可以看到多了一个a.txt文件
ls
# 切换回master分支
git checkout master
# 再次查看本地文件夹下的内容,可以发现a.txt不见了
ls

1.5图解

【切换回master分支】

工作区展示的就是版本库中当前分支的内容,所以切换回master就会发现a.txt不见了,如图。

在这里插入图片描述

1.6多个分支开发≈多人合作开发

  • Q1:为什么要有多个分支存在?
  • A1:可以多人同时开发,每一个人基于master创建自己的远程分支,然后再基于自己的远程分支创建本地分支,在自己的本地分支上开发。开发完成后提交到远程分支,最后再将所有人的提交内容合并到dev分支。就好比做一道西红柿炒鸡蛋,一个人切西红柿,一个人炒鸡蛋,最后将切好的西红柿和炒好的鸡蛋放在一起,简单翻炒一会,就可以出锅了。这样比一个人做西红柿炒鸡蛋快多了,大大提升了效率。
  • Q2:多人合作开发的优缺点?
  • A2:优点就是:提升效率,分工明确,互不干扰;缺点就是:如果合作不规范或者特殊情况,会容易产生代码冲突,就需要人工检查合并。

1.7图解

1.远程仓库中除master分支外,有三个基于master分支创建的远程分支(默认由三个人自己创建的)
2.三个人分别基于远程仓库的三个远程分支创建本地分支
3.三个人分别在自己的本地分支上开发(这里默认他们开发的部分不冲突,冲突问题放在第三章讲
4.三个人开发完成后,将开发的内容push到自己的远程分支
5.最终由组长来将三个远程分支的内容合并到master分支(一般来说会有一个dev分支,用来跑测试环境,组长先合并到dev分支,测试环境跑一段时间没问题后再合并到master上线,这里为了方便画图,直接省略dev分支
在这里插入图片描述

第2节:合并分支

  • 每一个分支都有一个头指针,指向分支的最新节点
  • HEAD指针指向的是当前分支的头指针
  • 合并的过程,实质上是分支头指针的转移过程

2.1本节涉及的概念

概念 解释
Fast forward模式 git merge时默认使用的方式:直接将当前分支指针指向要合并的分支指针
非Fast forward模式 git merge --no-ff:先创建一个新的历史节点,记录这次合并操作,然后再将当前分支指针指向要合并的分支指针

2.2本节涉及的git指令

指令 作用
git merge branch_1 将本地分支branch_1合并到当前分支
git merge origin/branch_1 将远程分支branch_1合并到当前分支
git merge --no-ff branch_1 将本地分支branch_1合并到当前分支,非Fast forward模式

2.3四种合并情况

  • 下面四个例子中,分支A和分支B既可以是远程分支也可以是本地分支

情况1:【分支A合并到分支B,A比B新,Fast forward模式合并】

1.图中001、002、003代表commit id
2.分支A和B的前两个历史节点其实是相同的,实际上应该是一条链表,这里画成两条链表是为了方便看“分支头指针”是如何转变的

在这里插入图片描述

情况2:【分支A合并到分支B,B比A新,Fast forward模式合并】

不会做任何操作,提示Already up to date.

情况3:【分支A合并到分支B,A比B新,非Fast forward模式合并】
在这里插入图片描述

情况4:【分支A合并到分支B,B比A新,非Fast forward模式合并】

不会做任何操作,提示Already up to date.

猜你喜欢

转载自blog.csdn.net/w_y_x_y/article/details/105953805