一、分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的 Bug 修改、开发新的功能,以免影响开发主线。
1、查看本地分支
- 命令:
git branch
2、创建本地分支
- 命令:
git branch 分支名
3、切换分支 (checkout)用的多
- 命令:
git checkout 分支名
我们还可以直接切换到一个不存在的分支(创建并切换)
- 命令:
git checkout -b 分支名
场景 1:切换到已创建的 dev 分支
bash
# 切换到dev分支
git checkout dev
# 验证切换结果
git branch
输出结果
plaintext
bash
* dev
feature-01
master
场景 2:创建并直接切换到新分支 bugfix-01(常用快捷操作)
bash
# 创建bugfix-01分支并切换
git checkout -b bugfix-01
# 验证切换结果
git branch
输出结果
plaintext
bash
dev
feature-01
* bugfix-01
master
4、合并分支 (merge)用的多
一个分支上的提交可以合并到另一个分支命令: git merge 分支名称
场景:将 bugfix-01 分支的修改合并到 master 主分支
bash
# 1. 先切换到「目标分支」(要合并到的分支,此处为master)
git checkout master
# 2. 执行合并命令(合并bugfix-01到当前分支)
git merge bugfix-01
输出结果(无冲突时)
plaintext
bash
Updating abc1230..def4567 # 版本号会不同,仅示例
Fast-forward # 快速合并(无冲突)
test.txt | 1 +
1 file changed, 1 insertion(+)
5、删除分支
不能删除当前分支,只能删除其他分支
- 命令:
git branch -d b1(删除分支时,需要做各种检查)
6.分支冲突
合并冲突处理示例(重点!真实开发高频场景)
场景:多分支修改同一文件的同一行,导致合并冲突
bash
# 13. 先模拟冲突场景:
# ① 切回feature-login分支,修改readme.txt第一行
git checkout feature-login
echo "【feature分支修改】这是master主分支的初始内容" > readme.txt
git add . && git commit -m "modify: 修改第一行内容"
# ② 切回master分支,修改同一行内容(与feature分支冲突)
git checkout master
echo "【master分支修改】这是master主分支的初始内容" > readme.txt
git add . && git commit -m "modify: master修改第一行内容"
# 14. 再次尝试合并feature-login到master(触发冲突)
git merge feature-login
# 终端会提示冲突:
# Auto-merging readme.txt
# CONFLICT (content): Merge conflict in readme.txt
# Automatic merge failed; fix conflicts and then commit the result.
# 15. 解决冲突(手动编辑文件)
# 打开readme.txt,会看到冲突标记(Git自动添加):
# <<<<<<< HEAD (HEAD代表当前master分支的内容)
# 【master分支修改】这是master主分支的初始内容
# ======= (分隔线:上=当前分支,下=待合并分支)
# 【feature分支修改】这是master主分支的初始内容
# >>>>>>> feature-login (待合并的分支名)
# 手动编辑文件,保留需要的内容(删除冲突标记),比如最终保留:
# 这是master主分支的初始内容(合并后统一内容)
# 新增:用户登录功能开发
# 16. 标记冲突已解决,并完成合并提交
git add readme.txt # 标记文件冲突已解决
git commit -m "merge: 解决feature-login与master的冲突,合并登录功能"
# 提交后终端提示:[master 789abc] merge: 解决feature-login与master的冲突,合并登录功能
# 17. 验证冲突解决结果
cat readme.txt # 查看最终内容,确认无冲突标记且内容正确
7.总结
bash
########################################################################
# 创建并切换到dev01分支,在dev01分支提交
########################################################################
# [当前在master分支] 创建dev01分支
git branch dev01
# [当前在master分支] 切换到dev01分支
git checkout dev01
# [当前在dev01分支] 创建文件file02.txt
# (手动操作:在当前目录新建file02.txt,或执行 touch file02.txt)
# [当前在dev01分支] 将修改加入暂存区并提交到仓库,提交记录内容为:add file02 on dev
git add .
git commit -m 'add file02 on dev'
# [当前在dev01分支] 以精简的方式显示提交记录
git log --pretty=oneline # 注:原文档的"git-log"是简写,实际命令是git log --pretty=oneline
########################################################################
# 切换到master分支,将dev01合并到master分支
########################################################################
# [当前在dev01分支] 切换到master分支
git checkout master
# [当前在master分支] 合并dev01分支到master分支
git merge dev01
# [当前在master分支] 以精简的方式显示提交记录
git log --pretty=oneline
# [当前在master分支] 查看文件变化(目录下会出现file02.txt)
# (手动操作:查看当前目录,或执行 ls 命令)
########################################################################
# 删除dev01分支
########################################################################
# [当前在master分支] 删除dev01分支
git branch -d dev01
# [当前在master分支] 以精简的方式显示提交记录
git log --pretty=oneline
二、仓库
推送本地库的文件
|---------------------------|
| git push -u origin master |
第⼀次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master 分支关联起来
只要本地作了提交,就可以通过命令:
|------------------------|
| git push origin master |
把本地master分支的最新修改推送至GitHub
查看远程仓库
git remote show
查看远程分支
git branch -a
我们加上参数v可以查看本地分支和远程分支的最后提交
git branch -av
三、克隆
我们可以把远程项目克隆到本地形成一个本地的仓库