Git
- ⛅创建&切换&合并分支
- ⛅删除分支
- ⛅合并冲突
- ⛅合并模式
- ⛅Bug 分支
- ⛅强制删除分支
master → 主分支
# 查看本地所有分支
git branch

分支前面的*, 代表当前所在的分支
图中当前所在的分支为master
⛅创建&切换&合并分支
# 创建分支
git branch "branchname"
# 切换分支
git checkout "branchname"
# 合并分支
git merge "branchname"
# 创建&切换分支
git checkout -b "branchname"

新创建的分支(dev)默认会指向当前所在的分支(master)的最新提交


- 合并分支
- 将
HEAD指向dev分支(切换分支到dev) - 在
dev分支下执行修改操作, 然后add&commit该内容(此时切换到master分支并不会看到dev分支提交的内容) - 将
HEAD指向master分支(切换分支到master) git merge dev→ 将dev分支的内容合并到master分支
- 将
⛅删除分支
# 删除分支
git branch -d "branchname"
注意
不能在当前分支删除当前分支

创建&合并&删除分支非常快, 因此Git鼓励使用分支完成某个任务, 合并后再删掉分支. 这和直接在master分支上工作效果是⼀样的, 但过程更安全
⛅合并冲突
master 分支下存在一个 ReadMe 文件, 内容如图

创建&切换分支到dev1(git checkout -b dev1)

修改 ReadMe 中的内容

在dev1分支下对 ReadMe 执行add&commit
切换分支到master(git checkout master)

修改 ReadMe 中的内容

在master分支下对 ReadMe 执行add&commit
合并分支(git merge dev1) → 合并冲突

查看 ReadMe 中的内容

<<<<<<< HEAD=======
这之间的内容表示当前分支的内容
=======>>>>>>> dev1
这之间的内容表示 dev1 分支的内容
对于冲突的部分, 需要我们自行选择进行保存 → 保存后需要执行add&commit
git log --graph --abbrev-commit → 查看合并过程



⛅合并模式
合并分支时, 如果可能, Git 会采用Fast-forward模式

合并结果如图

Fast forward模式下, 删除分支后, 查看分支历史时, 会丢掉分支信息, 无法确定最新提交的内容是merge进来的还是正常提交的
但在合并冲突部分, 通过解决冲突问题, 会再进行一次新的提交
这种模式就不属于Fast forward模式 → no-ff(非Fast forward模式)


这样就能够从分支历史上查看分支信息 → 能够确定最新提交的内容是merge进来的还是正常提交的
Git 支持我们强制禁用Fast forward模式, 即在merge时生成一个新的commit
# 合并 dev2 分支提交的内容到当前分支(采用 no-ff 模式)
[root@VM-8-11-centos gitcode]# git merge --no-ff -m "merge with no-ff" dev2
Merge made by the 'recursive' strategy.ReadMe | 1 +1 file changed, 1 insertion(+)

⛅Bug 分支
⛅强制删除分支

产品经理要求开发一个新的功能
此时开发人员就会从当前内容下创建一个新的分支来开发新的功能

做到一半时, 产品经理说这个功能被取消了
于是开发人员只能将当前创建的分支进行删除
但是对于这种已提交(commit)但没有进行合并(merge)的分支, 不能使用git branch -d "branchname" 命令进行删除
使用git branch -D "branchname"进行强制删除



