git 的分支是它最明显的特性, 大部分人听别人推荐使用git都会听到“git分支操作方便…”,对比其他版本控制系统git 分支操作有难以置信的轻量,创建新分支几乎瞬间完成,不同分支之间切换也非常快捷方便;
本文主要介绍了git分支的创建和删除,以及 push、pull、merge等基本操作
创建分支
首先我们得知道, GIT分支包括本地分支 与 远程分支。
有时远程有的分支我们本地没有(其他同事维护的分支), 或者本地有的分支远程没有(修复线上小问题开的本地小分支);
- 创建本地分支(有2种方法)
新分支都是基于原有分支创建, 而在实践开发中基本从线上分支(与线上代码同步的分支)master 分支创建。而 从master创建本地分支也有两种方式:
基于【本地master分支】创建本地分支1
2
3
4
5
6
7
8git branch # 查看本地分支
git branch xxx # 基于当前分支创建某分支
git checkout xxx # 切换某分支
git checkout -b newBranchName # 创建并切换到新分支(可以基于xxx分支创建新分支)
如:
git checkout master # 切换到本地master分支
git pull # 更新本地master分支的代码至最新
git pull origin master # 如 本地master分支未关联远程master分支基于【远程master分支】创建本地分支1
2
3git branch -a # 查看线上分支和本地分支信息 白色表示为本地分支 绿色为当前分支 红色表示线上分支
git checkout remotes/origin/master # 切换到远程分支
git checkout -b newBranchName # 基于远程master分支创建新分支
- 创建远程分支
创建远程分支可以直接由本地新分支推送完成也可以在远程分支管理系统(例如:github 、gitLab)上可视化操作完成。
- 本地新分支推送创建远程分支
如果本地创建的分支上上更新了代码,然后执行git add、git commit指令后, 再执行以下指令可在远程创建新分支;1
git push origin newBranch:newBranch # git push <远程主机名> <本地分支名>:<远程分支名>
- GitHub上创建远程分支
选中项目, 然后在项目首页左上侧点选分支按钮, 弹出的弹层输入新分支名称即可;
PS: 上述创建的同名本地分支跟远程分支并没建立关联, 这样操作指令会比较不方便(如“git pull”指令得输入对应的远程分支名), 怎么让其建立关联?1
2
3
4
5
6
7
8git checkout newBranchName # 切换到newBranchName分支(如当前处在其他分支)
git pull # 执行更新代码指令
# 执行git pull 就能看到git 的关联提示:
# 按照其提示提示执行指令即可:
# git branch --set-upstream-to=origin/<远程分支名> <本地分支名>如设置当前分支,第二个参数可省略,;
git branch --set-upstream-to=origin/newBranchName
# 校验是否关联成功:
git pull # 提示 “Already up-to-date.” 表示已关联成功;
合并分支
分支代码合并也有两方式: 合并本地分支代码、合并远程分支代码;
- 合并本地分支代码:
例如在新分支 newBranch开发的功能已完成并已提交;接下来走测试流程需要将代码合并到develop分支(我所在团队develop为测试分支,不同团队的测试分支会不一样)1
2
3
4
5git checkout newBranch # 首先切换到本地分支
git pull # 然后更新代码
git checkout develop # 再次切换到develop分支
git merge newBranch # 最后才能执行合并操作
git push # 提交commit到远程(newBranch分支有多少个commit就会生成几个)
其实可直接将远程的 newBranch分支代码合并到本地 develop分支:1
git pull origin newBranch
- 合并代码冲突解决
无论哪种方式合并分支代码代码冲突是无可避免的情况, 开发流程使用了typescript/sass等需要执行编译的语言更容易产生冲突;
分支合并代码冲突跟一般代码冲突一样: git能处理的冲突会自动解决, 否则就得手动解决冲突;冲突是由于多人维护代码导致,一定要找到相关人一起讨论冲突代码的取舍;
删除分支
上线流程完成:应删除本地分支及远程分支(git lab分支): git branch -D xxxx, 上线完成意味着当前xxx分支代码已经合并到线上分支(master)以及开发分支(develop), 该分支后续功能的改动(bug修复或代码扩展)完全可以在master新开分支完成;(否则可能遗忘删除,导致远程分支原来越多)
- 删除本地分支
1 | git branch -d xxxx # 如果该分支代码未合并到其他分支,将无法删除 |
- 删除远程分支
删除远程分支两种方式:
1.在git管理系统的Web页面操作(gitLab);
gitHub上无法删除远程分支, 如果你团队使用的是gitLab那可以在gitLab管理页面操作;
2.本地指令完成;1
git push origin --delete newBranch