Skip to content

分支管理

正如一开始所说,git 命令最大的坑还是命令功能的重复性,经常会有同一个功能有多个命令,互联网上不同时期的"学习笔记",让学习者痛苦万分,所以我在这里只会记录我自己的理解,不会记录所有的命令,如果你想要了解更多,请查看官方文档

1. 查看分支

bash
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看远程仓库地址
git remote -v

2. 新建分支

bash
# 新建分支
git branch 分支名
# 切换到该分支
git switch 分支名
# 创建分支并切换
git switch -c 分支名
# 将新建的分支推送到远程
git push -u origin 分支名
# -u选项表示将本地分支与远程分支关联起来,以便在以后的推送和拉取操作中可以省略分支名称
bash
# 新建分支
git branch 分支名
# 切换到该分支
git checkout 分支名
# 创建分支并切换
git checkout -b 分支名
# 将新建的分支推送到远程
git push -u origin 分支名
# -u选项表示将本地分支与远程分支关联起来,以便在以后的推送和拉取操作中可以省略分支名称

提示

git 中的 checkout 命令承载了分支操作和文件恢复的部分功能,有点复杂,并且难以使用和学习,

所以社区解决将这两部分功能拆分开,在git 2.23.0中引入了两个新的命令 switchrestore 用来取代 checkout

3. 修改分支

假设要将分支「AAA」修改为分支「BBB」

bash
# 1. 修改本地分支名
git branch -m AAA BBB
# 2. 删除远程分支AAA
git push origin :AAA
# 3. 将本地分支BBB推送到远程
git push -u origin BBB

4. 合并分支

git 合并分支有两种方式,一种是使用merge,另一种是使用rebase.

方法区别
merge将两个分支的最新提交合并,并且会生成一个新的提交
rebase将两个分支的最新提交合并,并且会将当前分支的提交放在最后

WARNING

执行 rebase 操作的时候,需要保证 master 分支处于最新状态,否则在 merge 合并的时候也可能存在冲突,就失去使用 rebase 的意义。

4.1 merge

合并会主分支有两种选择,即快速合并和非快速合并,二者的区别在于是否会生成一个新的提交

bash
# 快速合并
git merge 分支名
# 非快速合并
git merge --no-ff 分支名

快速提交图示:

快速提交图示

非快速提交图示: 非快速提交图示

对开源项目来说,非快速合并是一个很好的选择,因为这样可以保留分支的提交记录,方便以后的维护,如果选择快速合并,则需要保证每个提交都是独立且完整的。

4.2 rebase

变基示意图

“变基”通俗理解就是改变某个分支所基于的分支。把分支 b 的所有更改在 a 的基础上应用一次,然后把应用后的结果放到 b 里面,这种方法叫做“变基(rebase)”。你可以使用 rebase 命令把某一分支上的所有修改都复制到另一分支上,就好像重新播放一样。

4.2.1 变基当前分支

切换分支进行变基:

bash
# 1. 切换到要变基的分支
git switch 分支名
# 2. 变基
git rebase master

不切换分支进行变基:

bash
git rebase master 分支名

TODO(本章节未结束)