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"
进行强制删除