# 分支

使用GitHub中的分支隔离开发工作、管理默认分支，以及使用拉取请求和分支保护进行有效协作。

## 关于分支

分支允许你开发功能、修复 bug 或安全地试验存储库包含区域中的新想法。

始终从现有分支创建新分支。 通常，您可能会从仓库的默认分支创建新的分支。 然后，您可以单独处理这个新分支，不受其他人对仓库所做更改的影响。

你创建的用于生成功能的分支通常称为功能分支或主题分支。 请参阅“[Managing branches within your repository](/zh/enterprise-server@3.18/pull-requests/how-tos/commit-changes/managing-branches-within-your-repository)”。

还可以使用分支发布 GitHub Pages 站点。 请参阅“[什么是 GitHub Pages?](/zh/enterprise-server@3.18/pages/getting-started-with-github-pages/what-is-github-pages)”。

必须对仓库有写入权限才能创建分支、打开拉取请求、以及删除和恢复拉取请求中的分支。 请参阅“[对GitHub的访问权限](/zh/enterprise-server@3.18/get-started/learning-about-github/access-permissions-on-github)”。

## 关于默认分支

在 GitHub 和 GitHub 上创建一个有内容的仓库时，将创建包含单一分支的仓库。 仓库中的第一个分支是默认分支。 默认分支是当任何人访问存储库时显示的分支 GitHub 。 默认分支也是初始分支，当有人克隆存储库时，Git 会在本地检出该分支。 除非指定不同的分支，否则仓库中的默认分支是新拉取请求和代码提交的基础分支。

默认情况下，将 GitHub 任何新存储库中的默认分支 `main` 命名。

您可以更改现有仓库的默认分支。 有关详细信息，请参阅“[更改默认分支](/zh/enterprise-server@3.18/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/changing-the-default-branch)”。

您可以为新仓库设置默认分支名称。 有关详细信息，请参阅“[管理仓库的默认分支名称](/zh/enterprise-server@3.18/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-default-branch-name-for-your-repositories)”、“[管理组织中仓库的默认分支名称](/zh/enterprise-server@3.18/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization)”和“[在企业中实施仓库管理策略](/zh/enterprise-server@3.18/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-the-default-branch-name)”。

## 使用受保护分支

受保护的分支可帮助维护人员对重要分支强制执行规则。 受保护的分支可以阻止强制推送或删除、需要状态检查、需要评审、需要代码所有者批准或要求签名提交，然后更改才能合并。

这些保护可帮助团队保持重要分支稳定，并在合并拉取请求之前明确预期。 若要查看拉取请求是否可以合并，请检查拉取请求的 **“对话** ”选项卡底部的合并框。请参阅 [关于受保护分支](/zh/enterprise-server@3.18/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)。

> \[!NOTE]
> 如果你是存储库管理员，则即使拉取请求不符合要求，也可在启用了分支保护的分支上合并拉取请求，除非分支保护设置为“包括管理员”。

## 比较拉取请求中的分支

拉取请求将头分支上建议的更改与基分支进行比较。 创建拉取请求时，可以更改要比较更改的基分支。 “ **文件更改** ”选项卡显示拉取请求合并后会更改的内容。

差异视图可帮助审阅者在不阅读每个提交的情况下了解更改。 可以查看统一差异、拆分差异、丰富差异或源差异;忽略空格更改;或筛选文件以专注于最相关的更改。

![拉取请求的“已更改的文件”选项卡的屏幕截图。 “差异视图”菜单用深橙色框标出。](/assets/images/help/pull_requests/diff-settings-menu.png)

如果拉取请求超出存储库差异限制，或者某个文件被存储库的 *.gitattributes* 文件中的规则隐藏，则差异可能不会显示。 请参阅 [存储库限制](/zh/enterprise-server@3.18/repositories/creating-and-managing-repositories/repository-limits#diff-limits) 和 [自定义更改的文件在GitHub上的显示方式](/zh/enterprise-server@3.18/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github)。

### 三点和两点 Git 差异比较

该 `git diff` 命令支持两种比较方法。 拉取请求会显示 GitHub 三点差异。

| 方法 | 命令               | 它比较的内容                          |
| -- | ---------------- | ------------------------------- |
| 三点 | `git diff A...B` | 分支（合并基）和主题分支最新版本的最新常见提交。        |
| 双点 | `git diff A..B`  | 基本分支（例如） `main`的最新状态和主题分支的最新版本。 |

两点差异直接互相比较两个 Git committish 参考，如 SHA 或 OID（对象 ID）。 打开 GitHub时，必须将两点差异比较中的 Git 提交引用推送到同一存储库或其分支。

请参阅 *Pro Git* 书籍站点中的 [Git 差异选项](https://git-scm.com/docs/git-diff#git-diff-emgitdiffemltoptionsgtltcommitgtltcommitgt--ltpathgt82308203)。

### 关于三点比较 GitHub

由于三点比较使用合并基，因此重点介绍“拉取请求引入的内容”。

使用两点比较时，即使尚未对主题分支进行任何更改，差异也会在更新基本分支时发生更改。 双点比较还侧重于基分支，这可能会使主题分支引入的更改更难理解。

相比之下，三点比较一直显示主题分支自分支分歧以来引入的更改。

### 频繁合并

为了避免混淆，请经常将基分支（例如 `main`）合并到主题分支中。 合并基分支时，由双点和三点比较显示的差异是相同的。 建议尽快合并拉取请求。 这鼓励参与者更小地发出拉取请求，我们通常建议这样做。

## 延伸阅读

* [拉取请求](/zh/enterprise-server@3.18/pull-requests/reference/pull-requests)
* 术语表中的 GitHub[GitHub术语表](/zh/enterprise-server@3.18/get-started/learning-about-github/github-glossary#branch)
* Git 文档中的“[分支简介](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)”
* [叉子](/zh/enterprise-server@3.18/pull-requests/reference/forks)