简介
一家公司,不管是做 web 开发产品还是app开发产品,极少数是一个人来完成的。拿 JD 电商为例,这样一个庞大的系统涉及到的远不止这些,根据 JD 自己的说法,其投入的研发人员超1.8w人(不含外包)。
每个开发人员都负责自己的那部分模块的代码,并将修改后的代码提交到主分支之外的分支上,负责人再将修改后的代码进行合并。一些 bug、功能、性能等不能直接在稳定产品 master 主分支上面进行操作,这会影响业务的运行,因此我们需要分支,这也是 Git 的 "杀手锏"。简单来说,分支有3个好处:
- 与稳定的产品进行隔离,任何操作不影响业务的稳定性,通过代码 review 后,可合并到主分支上;
- 方便进行功能拓展与 bug 调试;
- 模块化的多人协同开发,提升开发效率;
正常来说,大多数情况下使用 Git 都会有这样的分支:
master
– 主分支,主要是正式版稳定版的分支develop
– 开发分支,更新和变动最为频繁的分支,正常情况下开发都在develop分支上release
– 预发行版分支,代表一个版本的功能已经大致完成,需要有相关人员进行功能测试features
– 功能分支,包含每个程序员开发的功能
分支的相关命令
涉及到的命令有:
git branch
– 分支的创建、删除、查看git switch
– 新版本中进行分支的切换git checkout
– 旧版本中进行分支的切换
git branch
该命令可以对分支进行创建、删除与查看
-
查看本地库的所有分支
PS > git branch * master new-branch
用 "*" 标识,表示当前位于这个本地分支上。
-
查看远程库的所有分支
PS > git branch -r
-
查看所有本地库与远程库的所有分支
PS > git branch -a
-
创建分支(在 master 分支的 8a77771 基础上创建分支)
PS > git branch * master new-branch PS > git log --oneline 8a77771 (HEAD -> master) 修改后的lab-file文件 f20abbc lab-file初始内容 47d9368 tmp-file.txt --> Tmp-File.txt ae6cc9d First commit 9a70355 测试文件 PS > git branch b1 # 切换分支 PS > git switch b1 Switched to branch 'b1' PS > git log --oneline 8a77771 (HEAD -> b1, master) 修改后的lab-file文件 f20abbc lab-file初始内容 47d9368 tmp-file.txt --> Tmp-File.txt ae6cc9d First commit 9a70355 测试文件
-
删除分支
-d
– 该分支必须合并到其上游分支才能使用该选项进行删除。支持在一条命令上删除多个分支-D
– 无论该分支是否合并到上游分支,都强制将其删除。支持在一条命令上删除多个分支
PS > git branch -d <branch-name> ... PS > git branch -D <branch-name> ...
git switch
-
切换分支
PS > git switch <branch-name>
-
创建新分支且切换到新分支
PS > git switch -c <branch-name>
如前面文档中提到的,当切换分支后:
HEAD 指向新的分支指针,分支指针指向最新的提交,此时 HEAD 依然通过分支指针间接指向最新提交。
git checkout
-
切换分支
PS > git checkout <branch-name>
-
创建新分支且切换到新分支
PS > git checkout -b <branch-name>
示例
首先将以前演示环境中的多余分支删除:
PS > git branch -a
* b1
master
new-branch
# 只保留 master 分支
PS > git switch master
PS > git branch -D b1 new-branch
我们可以演示从分支创建、合并到删除的一个完整过程:
PS > git log --oneline
8a77771 (HEAD -> master) 修改后的lab-file文件
f20abbc lab-file初始内容
47d9368 tmp-file.txt --> Tmp-File.txt
ae6cc9d First commit
9a70355 测试文件
# 在 8a77771 基础上新创建分支
PS > git switch -c newb1
Switched to a new branch 'newb1'
PS > git branch
master
* newb1
PS > git log --oneline
8a77771 (HEAD -> newb1, master) 修改后的lab-file文件
f20abbc lab-file初始内容
47d9368 tmp-file.txt --> Tmp-File.txt
ae6cc9d First commit
9a70355 测试文件
# 在 newb1 分支上创建新文件并写入文件内容
PS > new-Item start.log
PS > echo "GNU/Linux" > .\start.log
# 切换到 master 分支
PS > git switch master
Switched to branch 'master'
PS > ls
Directory: E:\git-test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2025/3/9 21:31 39 lab-file.txt
-a--- 2025/3/12 15:38 11 start.log ← 在其他分支上创建的新文件也可以在主分支上显示
-a--- 2025/3/9 21:31 12 Tmp-File.txt
# 在这两个分支中,该文件的状态都是一样的 —— 工作在工作区,文件状态为未跟踪:
PS > git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
start.log
nothing added to commit but untracked files present (use "git add" to track)
PS > git switch newb1
PS > git status
On branch newb1
Untracked files:
(use "git add <file>..." to include in what will be committed)
start.log
nothing added to commit but untracked files present (use "git add" to track)
# 在 newb1 分支中进行提交
PS > git add ./
PS > git commit -m "newb1分支中的第一个新文件"
# 一旦进行提交,主分支 master 的状态为:
PS > git switch master
Switched to branch 'master'
PS > git status
On branch master
nothing to commit, working tree clean
PS > ls
Directory: E:\git-test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2025/3/9 21:31 39 lab-file.txt
-a--- 2025/3/9 21:31 12 Tmp-File.txt
# 将 newb1 分支的文件变更合并到 master 上
## 这里的合并采用的是 merge 方式,他还有一个兄弟,被称为 rebase,这里先不展开
PS > git merge newb1
Updating 8a77771..4be932e
Fast-forward
start.log | 1 +
1 file changed, 1 insertion(+)
create mode 100644 start.log
PS > ls
Directory: E:\git-test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2025/3/9 21:31 39 lab-file.txt
-a--- 2025/3/12 17:08 11 start.log
-a--- 2025/3/9 21:31 12 Tmp-File.txt
# 将 newb1 分支中的修改合并到了 master 分支中,此时就不需要 newb1 分支了
PS > git branch -d newb1
Deleted branch newb1 (was 4be932e).
PS > git branch
* master
PS > git log --oneline
4be932e (HEAD -> master) newb1分支中的第一个新文件
8a77771 修改后的lab-file文件
f20abbc lab-file初始内容
47d9368 tmp-file.txt --> Tmp-File.txt
ae6cc9d First commit
9a70355 测试文件
使用 merge 方式进行合并时要注意,该方式是将其他分支所做的修改合并在当前活跃分支上,换言之,您必须首先切换到要合并的分支上才能进行下一步的 merge 操作(如 git switch master && git merge newb1
)。
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)

用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论