首先需要了解分支的本质,分支可以理解为一个指向某个commit对象的指针,但是它是可变的,随着commit提交的变化,指针跟随移动,始终指向当前分支最新的那个提交。使用 git log --oneline 命令可以查看每个分支指向的提交信息。git中的分支信息都保存在.git目录下,具体位置参考git目录介绍

1. 新建分支
git branch newBr
新建名为newBr的分支,如果分支已经存在,代码会报错
git branch -f newBr
强行创建名为newBr的分支,原来的同名分支会被新建分支覆盖
特别说明:上述方式新建分之后,并不能自动切换到新分支
checkout -b newBr
新建分支的同时切换分支,如果分支已经存在,代码会报错
checkout -B newBr
强行创建,原来的同名分支会被新建分支覆盖
上述4种方式都是基于当前分支进行创建新分支
git branch newBr commitId
基于某次提交创建新分支,其中commitId是该提交对象的id,可以是前几位缩写。前4种语法都可以适用该语法。
git stash branch newBr stashIndex
git基于指定stash储藏创建分支
git stash branch newBr stash@{0} 或者 git stash branch newBr 0 表示基于序号为0的stash创建分支(参考git stash用法)
2. 分支切换
git checkout branchName
注意:切换分支并不会改变当前工作区和暂存区
3. 查看所有分支 (当前分支会高亮显示)
git branch
4. 分支重命名 (不推荐)
git branch -m oldName newName
5. 删除分支 (可一次性删除多个)
git branch -d branchOne branchTwo
注意:不能在当前分支删除当前分支,同时分支上如果还未合并,会提示无法删除,这时需要强制删除 git branch -D newBr
6. 分支恢复
![]()
每个分支就像一个指针指向某个commit对象,只要记住该对象对应的sha-1键值,使用该提交重新创建分支即可。
PS:如果不清楚该sha-1id,也可以通过reflog命令查看
7. 分支合并
git merge dev
表示将dev分支上的内容合并到当前分支,此操作在未发生冲突时会自动生成提交对象并进行提交。
假若发生冲突,git 只做合并操作,并未进行提交。同时会生成冲突文件,通过 git status 命令可查看未合并的冲突文件提示

比如,a.txt 文本中内容分别为aaaa 和 bbbb,此时就需要我们手动解决冲突



修改好后,需要手动再次 add 该文件并再次 commit
如果想将dev上的代码合并到master,可参考以下简洁用法
git checkout dev # 检出dev
git pull # 从远端拉取dev上的最新代码
git checkout master # # 检出master
git merge dev # 合并dev到master
git push -u origin master # 推送到远端master
更高级的用法暂不深究。
附:Git开发流程标准中的分支划分,参考文章http://www.softwhy.com/article-8651-1.html
一.分支种类:
当在实际应用开发中,特别是比较复杂的项目,Git不可能只存在一个分支。
比如主分支存放当前线上稳定版代码,还有正在进行测试的非稳定版本分支,或者还有正在开发新功能的分支。
开发建议Git有如下分支(不是影响固定,仅供参考):
(1).master。
(2).develop。
(3).hotfix。
(4).release。
(5).feature。
图示如下:
二.分支种类作用介绍:
1.master分支:
此分支通常用来存放项目的稳定版本,主要特点如下:
(1).内容来源主要是分支合并过来,不推荐开发者直接commit提交。
(2).由于master分支可以是稳定版本,可以随时上线,所以通常版本标签都是打在master分支各个提交之上。
关于标签的用法可以参阅Git tag标签用法详解一章节。
2.develop分支:
develop开发分支通常和feature特征分支配合使用,它是所有feature特征分支的基础。
当在feature分支中测试完新开发的功能后,可以将其合并到develop分支。
3.hotfix分支:
当出现紧急问题,比如master线上分支出现代码问题,可以在此分支中进行修补,修补之后然后再合并到master分支。
特别说明:在合并到master主分支的同事,还要合并一份到develop分支,否则之后将develop合并到master时候,可能会导致修复的问题复现。
4.release分支:
当develop分支开发到自认为足够稳定的状态,将此分支合并到release分支(在此分支进行上线前的最后测试)。
最后测试完成后,再合并到master分支和develop分支。
合并到master分支是非常好理解的,因为要上线运行。合并到develop是因为release分支后续可能还会发现问题,所以要将与develop分支同步,以防止以后develop再合并到release分支出现问题。
5.feature分支:
此分支作用其在介绍develop分支的时候已经涉及,在feature进行新功能的开发,开发完成后再合并到develop。
来源:CSDN
作者:MrMoving
链接:https://blog.csdn.net/java_lifeng/article/details/103969584