第5章:Git分支与冲突
一、Git分支介绍
一)Git分支
Git的分支是让Git从众多版本控制软件中脱颖而出的特点之一。
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针
Git 的默认分支名字是 master
master分支会在每次提交时自动向前移动。
二、创建分支
Git创建新分支非常简单,它其实就是创建了一个可以移动的新的指针
一)TortoiseGit
右键,TortoiseGit,创建分支
查看已经创建的分支
创建历史版本的分支
二)Git命令
命令;git branch <name>
# 创建分支03
$ git branch 03
三、切换分支
通过切换分支可以将工作区切换到不同的分支
Git中有一个名为 HEAD的特殊指针,通过它可以知道当前工作区在哪一个分支上
一)TortoiseGit
在项目中,右键,TortoiseGit,切换/检出,选择需要切换的“分支”
二)Git
切换到已存在的分支:git checkout <name>
创建新分支并切换到该分支:git checkout -b <name>
# 切换到分支01
$ git checkout 01
Switched to branch '01'
# 基于01的分支,创建04分支,并检出到04
$ git checkout -b 04
Switched to a new branch '04'
四、删除分支
一)TortoiseGit
在项目中,右键,TortoiseGit,版本分支图
右键,删除分支/标签,选择需要删除的“分支”
注意:如果需要删除当前正在使用的分支,需要切换到其他分支
二)Git
命令:git branch -d <name>
# 删除01分支
$ git branch -d 01
Deleted branch 01 (was 8640e2a).
# 列出所有版本(带*的表示当前版本)
$ git branch
03
* 04
master
五、合并分支
分支上的开发完成以后,就可以将分支的内容合并到别的分支
一)快进合并
Fast-forward 是最简单的一种合并策略,这种策略适用于要合并的两个分支并没有分叉的情况。
1.TortoiseGit
先切换到master
执行合并
2.Git
命令:git merge <name>
# 切换到master分支
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
# git merge 需要合并的分支名
$ git merge 04
二)自动合并
当要合并的两个分支都有新的提交,就不再是fast-forward了。
如果两个分支修改的内容没有冲突,则Git会自动合并
修改不同的文件
修改同一文件不同的行
修改的内容一模一样
步骤:和快进合并相同
六、冲突及处理
如果两个分支修改的内容有冲突,Git无法自动合并,就会产生冲突
此时我们需要手动合并文件,然后提交版本就可以完成合并
一)TortoiseGit
七、Git标签
Git 可以给仓库历史中的某一个提交打上标签,以示重要
比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)
一)TortoiseGit
二)Git
命令:git tag -a <name>
# 切换到分支01
$ git checkout 01
Switched to branch '01'
# git tag -a 标签名 -m 描述
$ git tag -a v1.0 -m "my first version 1.0"
八、远程分支
远程分支是远程仓库中的分支,可以将本地分支与远程分支关联,利用pull和push同步本地分支和远程分支
一)远程分支的推送
1.TortoiseGit
通过“推送”命令可以将本地分支内容推送到远程分支
远程分支如果不存在,会自动创建
2.Git
命令:git push <远程仓库名> <本地分支名>:<远程分支名>
$ git push -u origin 03:03
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for '03' on Gitee by visiting:
remote: https://gitee.com/quite-moon/test/pull/new/quite-moon:03...quite-moon:master
To gitee.com:quite-moon/test.git
* [new branch] 03 -> 03
branch '03' set up to track 'origin/03'.
二)远程分支的拉取
远程分支已和本地分支建立关联
使用“拉取”功能
远程分支还未和本地分支建立关联
使用“切换/检出”功能,拉取远程的分支的同时创建本地的跟踪分支
九、远程分支的冲突管理
当远程分支冲突时,需先“拉取”,解决冲突;然后“提交";最后”推送“
实际开发中,建议开发前,创建新分支,待开发完,再合并删除