Git branch 管理分支
本章节对 git branch
命令进行详细的介绍并且对整个 Git 分支模型进行一些讨论。 分支是大多数现代版本控制系统中可用的功能。 在其他 VCS 中进行分支在时间和磁盘空间方面都是一项昂贵的操作。 在 Git 中,分支是日常开发过程的一部分。 Git 分支实际上是指向更改快照的指针。 当我们想要添加新功能或修复错误时(无论大小),就可以生成一个新分支来进行更改。 这使得不稳定的代码更难以合并到主代码库中,并且它让我们有机会在将其合并到主分支之前清理未来的历史记录。
上图显示了具有两条独立开发线的仓库,一条用于小功能的开发,另一条用于长期运行的功能。 通过在分支中开发它们,不仅可以并行处理它们,而且还可以使主分支免受有问题的代码的影响。
Git 分支背后的实现比其他版本控制系统模型要轻量得多。 Git 不是将文件从一个目录复制到另一个目录,而是存储一个分支作为对提交的引用。 从这个意义上说,一个分支代表了一系列提交的顶部——它不是提交的容器。 分支的历史是通过提交关系推断出来的。
在阅读时,请记住 Git 分支与 SVN 分支不同。 SVN 分支仅用于捕获偶尔的大规模开发工作,而 Git 分支是日常工作流程中不可或缺的一部分。 下面的内容将在内部的 Git 分支架构上展开。
Git 分支如何工作
一个分支代表一条独立的开发线。 分支作为编辑/暂存/提交过程的抽象。 我们可以将它们视为请求全新工作目录、暂存区和项目历史的一种方式。 新的提交记录在当前分支的历史记录中,从而在项目的历史记录中产生分支。
git branch 命令允许我们创建、列出、重命名和删除分支。 它不会在分支之间切换或将分叉的历史重新组合在一起。 因此,git branch 与 git checkout 和 git merge 命令紧密的结合使用。
git branch 常见选项
git branch
# 或者
git branch --list
列出仓库中的所有分支。
git branch <branch>
创建一个名为<branch>
的新分支。这并没有检出新的分支。
git branch -d <branch>
删除指定的分支。这是一个“安全”操作,因为 Git 会阻止我们删除具有未合并更改的分支。
git branch -D <branch>
强制删除指定的分支,即使它有未合并的更改。如果想永久丢弃与特定开发线相关的所有提交,则可以使用此命令。
git branch -m <branch>
将当前分支重命名为<branch>。
git branch -a
列出所有远程分支。
git branch 创建分支
重要的是要了解分支只是指向提交的指针。 当你创建一个分支时,Git 需要做的就是创建一个新的指针,它不会以任何其他方式改变仓库。 如果从如下所示的仓库开始:
然后,使用以下命令创建一个分支:
$ git branch crazy-experiment
仓库历史保持不变。你得到的只是一个指向当前提交的新指针:
注意
- 这只会创建新分支。 要开始向它添加提交,需要使用 git checkout 选择它,然后使用标准的 git add 和 git commit 命令。
创建远程分支
到目前为止,这些示例都演示了本地分支的操作。git branch
命令也适用于远程分支。为了在远程分支操作,必须首先配置远程仓库的连接并将其添加到本地仓库配置中。
在之前的文章中,我们已经添加了远程仓库,可以使用以下 git remote 命令来查看远程仓库信息
$ git remote -v
接下来我们看一下如何创建一个远程分支,在创建远程分支之前我们先使用以下命令查看目前远程仓库都有哪些分支
$ git branch -r
现在添加远程分支,命令如下
$ git branch new_branch_jiyik
然后使用 git push 命令将新建的分支 new_branch_jiyik 推送到远程仓库
$ git push origin new_branch_jiyik
$ git branch -r
我们可以看到远程仓库已经有我们新建的分支 new_branch_jiyik
了。
git branch 删除分支
一旦完成了一个分支的工作并将其合并到主代码库中,那么接下来我们就可以自由删除该分支而不会丢失任何历史记录:
$ git branch -d new_branch_jiyik
但是,如果分支尚未合并,则上述命令将输出错误消息:
error: The branch 'new_branch_jiyik' is not fully merged. If you are sure you want to delete it, run 'git branch -D new_branch_jiyik'.
这可以保护您免于失去对整个开发线的访问权限。 如果你真的想删除分支,可以使用大写的 -D
选项:
$ git branch -D new_branch_jiyik
无论其状态如何,这都会删除分支,并且不会发出警告,因此请谨慎使用它。
前面的命令将删除分支的本地副本。该分支可能仍然存在于远程仓库中。要删除远程分支,需要使用 git push 命令。
$ git push origin --delete new_branch_jiyik
或者
git push origin :new_branch_jiyik
这会将删除信号推送到远程 origin 仓库,触发远程 new_branch_jiyik 分支的删除。
git branch 概括
在本文档中,我们讨论了 Git 的分支行为和 git branch 命令。 git branch 命令的主要功能是创建、显示、重命名和删除分支。 为了进一步对结果分支进行操作,该命令通常与 git checkout 等其他命令一起使用。 详细了解 git checkout 分支操作; 比如切换分支和合并分支,可以查看git checkout 命令。
与其他VCS相比,Git的分支操作成本低廉,使用频率高。 这种灵活性支持强大的 Git 工作流自定义。