Close

Git 分支

本文档深入回顾了 git branch 命令,并讨论了整个 Git 分支模型。分支是大多数现代版本控制系统中提供的一项功能。在其他 VCS 中进行分支在时间和磁盘空间上都可能是一项昂贵的操作。在 Git 中,分支是您日常开发流程的一部分。Git 分支实际上是指向您变更快照的指针。当您想要添加新功能或修复缺陷时,无论错误大小,您都会生成一个新分支来封装您的变更。这使得不稳定的代码更难合并到主代码库中,也让您有机会在将未来的历史记录合并到 main 分支之前进行清理。


本文档深入回顾了 git branch 命令,并讨论了整个 Git 分支模型。分支是大多数现代版本控制系统中提供的一项功能。在其他 VCS 中进行分支在时间和磁盘空间上都可能是一项昂贵的操作。在 Git 中,分支是您日常开发流程的一部分。Git 分支实际上是指向您变更快照的指针。当您想要添加新功能或修复缺陷时,无论错误大小,您都会生成一个新分支来封装您的变更。这使得不稳定的代码更难合并到主代码库中,也让您有机会在将未来的历史记录合并到 main 分支之前进行清理。

Git 分支
控制台窗口
相关资料

高级 Git 日志

Bitbucket 徽标
查看解决方案

了解 Bitbucket Cloud 的 Git

上图显示了一个存储库,该存储库有两个独立的开发行,一个用于一个小功能,另一个用于长期运行的功能。通过在分支中开发它们,不仅可以同时处理这两个分支,还可以使 main 分支免受可疑代码的影响。

Git 分支背后的实现比其他版本控制系统模型轻得多。Git 不会将文件从一个目录复制到另一个目录,而是存储一个分支作为对提交的引用。从这个意义上讲,分支代表了一系列提交的尖端——它不是提交的容器。分支的历史记录是通过提交关系推断出来的。

阅读时,请记住 Git 分支不像 SVN 分支。虽然 SVN 分支仅用于捕捉偶尔的大规模开发工作,但 Git 分支是您日常工作流程中不可或缺的一部分。以下内容将扩展内部 Git 分支架构。

工作原理


一个分支代表一个独立的发展思路。分支可用作编辑/阶段/提交过程的抽象化。您可以将其视为一种请求全新工作目录、暂存区和项目历史记录的方式。新的提交将记录在当前分支的历史记录中,因此将在项目的历史记录中创建新拷贝。

git branch 命令允许您创建、列出、重命名和删除分支。它不允许您在分支之间切换,也不能将拷贝的历史记录重新组合在一起。出于这个原因,git branchgit checkoutgit 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 addgit 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 的持续更新。

人们通过满是工具的墙进行协作

Bitbucket 博客

Devops 示意图

DevOps 学习路径

与 Atlassian 专家一起进行 Den 功能演示

Bitbucket Cloud 与 Atlassian Open DevOps 如何协同工作

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up