分支概念分析
master 分支(主分支),是每次提交串成的时间线。
HEAD 严格来说不是指提交,而是指向 master,master 才是指向提交的。HEAD 指向的就是当前分支。
分支流程:
- 开始时:master 分支是一条线,Git 用 master 指向最新的提交,再用 HEAD 指向 master,就能确定当前分支,以及当前分支的提交点:
- 原分支提交:master 分支都会向前移动一步;master 分支线会随提交不断变长。
- 创建新的分支:例如 dev 时,Git 创建了一个 dev 的指针;指向 master 相同的提交,再把 HEAD 指向 dev,就表示当前分支在 dev 上:
- 新分支提交:此时对工作区的修改和提交就是针对 dev 分支,dev 指针往前移动一步,而 master 指针不变:
- 合并分支:完成在 dev 上的工作完成,可以把 dev 合并到 master 上。直接将 master 指向 dev 的当前提交,就完成了合并:
- 合并完成分支后:可以删除 dev 分支:
特点:
- Git 创建分支快:除了增加一个 dev 指针,改变 HEAD 的指针,工作区的文件不会有任何变化。
- Git 合并分支快:修改指针,工作区内容不变。
分支相关命令
-
创建分支:执行 git checkout -b dev 命令创建分支:
$ git checkout -b dev Switched to a new branch 'dev'
git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:
$ git branch dev $ git checkout dev Switched to branch 'dev'
-
查看分支:执行 git branch 命令查看当前分支;
git branch 命令会列出所有分支,当前分支前面会标一个 * 号:$ git branch * dev master
-
提交分支:执行 git add、git commit 命令提交分支:
对 readme.txt 修改:Creating a new branch is quick.
提交:
$ git add readme.txt $ git commit -m "branch test" [dev b17d20e] branch test 1 file changed, 1 insertion(+)
-
合并分支:执行 git merge dev 命令合并分支:
dev 分支的工作完成,可以切换回 master 分支:$ git checkout master Switched to branch 'master'
此时修改内容在 dev 分支上,master 的内容没有改变,接下来就是把 dev 修改的内容合并到 master 上;Fast-forward 说明此次合并是 “快进模式”:
$ git merge dev Updating d46f35e..b17d20e Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
-
删除分支:执行 git branch -d dev 删除分支:
$ git branch -d dev Deleted branch dev (was b17d20e).
switch
因为 git checkout < branch > 切换分支命令与 git checkout – < files > 撤销修改命令容易混淆。
新版本 Git 提供 git switch 命令来处理分支:
-
创建并切换到新的 dev 分支:
$ git switch -c dev
-
直接切换到已有的 master 分支:
$ git switch master
总结一下:
- 查看分支:git branch
- 创建分支:git branch < name >
- 切换分支:git checkout < name > 或 git switch < name >
- 创建 + 切换:git checkout -b < name > 或 git switch -c < name >
- 合并某分支到当前分支:git merge < name >
- 删除分支:git branch -d < name >