Git 分支
本文档深入回顾了 git branch
命令,并讨论了整个 Git 分支模型。分支是大多数现代版本控制系统中提供的一项功能。在其他 VCS 中进行分支在时间和磁盘空间上都可能是一项昂贵的操作。在 Git 中,分支是您日常开发流程的一部分。Git 分支实际上是指向您变更快照的指针。当您想要添加新功能或修复缺陷时,无论错误大小,您都会生成一个新分支来封装您的变更。这使得不稳定的代码更难合并到主代码库中,也让您有机会在将未来的历史记录合并到 main 分支之前进行清理。
本文档深入回顾了 git branch
命令,并讨论了整个 Git 分支模型。分支是大多数现代版本控制系统中提供的一项功能。在其他 VCS 中进行分支在时间和磁盘空间上都可能是一项昂贵的操作。在 Git 中,分支是您日常开发流程的一部分。Git 分支实际上是指向您变更快照的指针。当您想要添加新功能或修复缺陷时,无论错误大小,您都会生成一个新分支来封装您的变更。这使得不稳定的代码更难合并到主代码库中,也让您有机会在将未来的历史记录合并到 main 分支之前进行清理。
相关资料
高级 Git 日志
查看解决方案
了解 Bitbucket Cloud 的 Git
上图显示了一个存储库,该存储库有两个独立的开发行,一个用于一个小功能,另一个用于长期运行的功能。通过在分支中开发它们,不仅可以同时处理这两个分支,还可以使 main
分支免受可疑代码的影响。
Git 分支背后的实现比其他版本控制系统模型轻得多。Git 不会将文件从一个目录复制到另一个目录,而是存储一个分支作为对提交的引用。从这个意义上讲,分支代表了一系列提交的尖端——它不是提交的容器。分支的历史记录是通过提交关系推断出来的。
阅读时,请记住 Git 分支不像 SVN 分支。虽然 SVN 分支仅用于捕捉偶尔的大规模开发工作,但 Git 分支是您日常工作流程中不可或缺的一部分。以下内容将扩展内部 Git 分支架构。
工作原理
一个分支代表一个独立的发展思路。分支可用作编辑/阶段/提交过程的抽象化。您可以将其视为一种请求全新工作目录、暂存区和项目历史记录的方式。新的提交将记录在当前分支的历史记录中,因此将在项目的历史记录中创建新拷贝。
git branch
命令允许您创建、列出、重命名和删除分支。它不允许您在分支之间切换,也不能将拷贝的历史记录重新组合在一起。出于这个原因,git branch
与 git checkout 和 git merge 命令紧密集成。
常用选项
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 所需要做的就是创建一个新指针,它不会以任何其他方式变更存储库。如果您从一个看起来像这样的存储库开始:
然后,使用以下命令创建分支:
git branch crazy-experiment
存储库历史记录保持不变。您得到的只是一个指向当前提交的新指针:
请注意,这只会创建新分支。要开始向其添加提交,您需要使用 git checkout
将其选中,然后使用标准的 git add
和 git commit
命令。
创建远程分支
到目前为止,这些示例都展示了本地分支的运营。git branch
命令也适用于远程分支。为了在远程分支上运行,必须首先配置远程代码存储库并将其添加到本地代码存储库配置中。
$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo
此命令会将本地分支 crazy-experiment
的副本推送到远程代码存储库 <remote>。
删除分支
完成分支的工作并将其合并到主代码库后,您可以自由删除该分支而不会丢失任何历史记录:
git branch -d crazy-experiment
但是,如果分支尚未合并,上面的命令将输出错误消息:
error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.
这可以保护您免于失去对整个开发行的访问权限。如果您真的想删除分支(例如,这是一个失败的实验),您可以使用大写 -D
标记:
git branch -D crazy-experiment
这会删除分支,无论其状态如何,也不会发出警告,因此请谨慎使用。
前面的命令将删除分支的本地副本。该分支可能仍存在于远程代码存储库中。要删除远程分支,请执行以下命令。
git push origin --delete crazy-experiment
或
git push origin :crazy-experiment
这会将删除信号推送到远程原始存储库,触发对远程 crazy-experiment
分支的删除。
摘要
在本文档中,我们讨论了 Git 的分支行为和 git branch
命令。git branch
命令的主要功能是创建、列出、重命名和删除分支。为了在生成的分支上进一步操作,该命令通常与其他命令(例如 git checkout
)一起使用。了解有关 git checkout
分支操作的更多信息,例如切换分支和合并分支,请见 git checkout 页面。
与其他 VCS 相比,Git 的分支操作经济实惠且经常使用。这种灵活性支持强大的 Git 工作流程自定义。有关 Git 工作流程的更多信息,请访问我们的扩展工作流程讨论页面:功能分支工作流程、GitFlow 工作流程和拷贝工作流程。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。