
# 管理分支
分支是版本管理工具中最常用的一种管理手段，使用分支可以把项目开发中的几项工作彼此隔离开来使其互不影响，当需要发布版本之前再通过分支合并将其进行整合。
在代码托管服务/Git仓库创建之初都会默认生成一条名为master的分支，一般作为最新版本分支使用，开发者可以随时手动创建自定义分支以应对实际开发中的个性场景。
#### 在控制台上新建分支
1. 进入仓库列表。
2. 单击仓库名称进入仓库详情。
3. 切换到"代码"页签下的**"分支"**子页签，进入分支列表页面。
4. 单击"新建分支"按钮，用户在弹出的窗口中选择要基于哪个分支或Tag进行创建，也可以输入Commit ID，基于Commit ID创建新的分支。
5. 填写"分支名称"，分支名不支持以"-"、"."、"refs/heads/"、"refs/remotes/"、"/"开头，不支持空格和\[ \\ \< \~ \^ : ? \* ! ( ) ' " \| $ \& ;等特殊字符，不支持以"."、"/"、".lock"结尾，不能有两个连续的点".."，不能包含序列"@{"。 
   **需要注意**：当仓库中已存在同名称的分支/Tag或者上级分支/Tag时，则该分支不可被创建。
   
   
6. 可为新建的分支填写"描述"，选择可"关联工作项"。当前Repo可关联的工作项类别请参考[E2E设置](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0046.html)。
7. 单击"确定"按钮，即可完成分支的新建。
 
#### 在控制台中管理分支
![](https://support.huaweicloud.com/usermanual-codeartsrepo/public_sys-resources/warning_3.0-zh-cn.png)
- 只有开启IP白名单的机器才可以从界面下载源码压缩包。
- 如果用户误删了分支，可提交工单联系技术支持处理。
 
在控制台的分支列表中可以进行如下操作。
- 分支筛选
  - **所有分支：** 显示所有分支，**"默认分支"**将显示在最前面，其余分支按最近提交时间排序，最新提交的分支将更靠前。
  
  - **我的分支：**显示我创建的所有分支，按最近提交时间排序，最新提交的分支将更靠前。
  
  - **活跃分支：**显示过去一个月内存在开发活动的分支，按最近提交时间排序，最新提交的分支将更靠前。
  
  - **过时分支：**显示过去一个月内没有任何活动的分支，按最近提交时间排序，最新提交的分支将更靠前。
   
- 单击某个"分支名称"，可跳转到该分支的文件列表，可查看该分支的内容、历史等信息。
- 单击某个分支的提交ID，可跳转到该分支的最新一次提交记录详情中，可查看本次提交的内容。
- 单击分支名称前面的勾选框，单击**"批量删除"**，可批量删除分支。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251195673.png "点击放大")，可对该分支进行工作项关联操作。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155920.png "点击放大")，可定位到"对比"子页签，可以对将此分支与其它分支进行差异对比。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251275569.png)，可下载该分支的压缩包到本地。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216315708.png)，可以跳转到"合并请求"页签，可对该分支创建分支合并请求。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216315692.png)，可跳转到仓库设置中设置该分支为保护分支。
- 单击某个![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216315704.png)，可以按提示操作，将该分支进行删除。
 
#### 关于分支的常用Git命令
- **新建分支**
  ```
  git branch <分支名称>           #在本地仓库基于目前的工作区，创建一条分支
  ```
  示例如下：
  ```
  git branch branch001            #在本地仓库基于目前的工作区，创建一条名为 branch001 的分支
  ```
  无回显则为创建成功，如下图为使用了重复名称创建，更换一个名称再创建即可。
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216315684.png "点击放大")
  

- **切换分支**
  切换分支可以理解为将该分支的文件内容检出到当前的工作目录。
  ```
  git checkout <分支名称>        #切换到指定分支
  ```
  示例如下：
  ```
  git checkout  branch002        #切换到名为 branch002 的分支
  ```
  下图为切换成功：
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251195721.png "点击放大")
  
- **新建并直接切换到新建的分支**
  有一种快速的操作办法，可以直接新建并切换到新建出来的分支，其用法如下：
  ```
  git checkout -b <分支名称>     #在本地仓库基于目前的工作区，创建一条分支，并直接切换到该分支
  ```
  示例如下：
  ```
  git checkout -b branch002      #在本地仓库基于目前的工作区，创建一条名为 branch002 的分支，并直接切换到该分支
  ```
  下图为该命令执行成功：
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155876.png "点击放大")
  
- **查看分支**
  用户可以使用对应的命令查看本地仓库的分支、远程仓库的分支，亦或是全部，这组命令只是将分支名称罗列，如果想查看分支内的具体文件，请使用切换分支。
  ```
  git branch                              #查看本地仓库分支
  ```
  ```
  git branch -r                           #查看远程仓库分支
  ```
  ```
  git branch -a                           #同时查看本地仓库与远程仓库的分支
  ```
  如下图，分别依次执行了以上三种命令，Git清晰的将本地仓库与远程仓库中的分支以不同的样式展现（远程仓库分支展现形式 remote/远程仓库别名/分支名）。
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155892.png "点击放大")
  
- **合并分支**
  当一条分支上的开发任务完成了，有时需要将其合并到另一条分支，以做功能归档，合并分支可以理解为将另一条分支最新的修改同步到当前所处分支，其用法如下：
  ```
  git merge <要合并过来的分支的名称>        #将一条分支合并到当前的分支中
  ```
  分支合并前一般要先切换到被合入的分支，下面以将branch002 合入到master分支为例进行演示：
  ```
  git checkout master                       #切换到master分支
  git merge branch002                       #将名为 branch002 的分支合入到master分支
  ```
  如下图是上面命令的执行效果，可以看到合并成功，合并了一个文件的变化，其变化是新增了3行内容。
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155944.png "点击放大")
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/public_sys-resources/note_3.0-zh-cn.png)
  有时在合并时会提示出现了文件修改冲突（如下图"fileOnBranch002.txt"这个文件在合并时冲突了）。
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251195669.png "点击放大")
  解决方法是打开这个冲突的文件，手动编辑以将有冲突的代码（如下图）进行取舍，解决后保存，再进行一次 add 和 commit 操作，将其结果存储进本地仓库。
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155900.png)
  
- **删除本地分支**
  ```
  git branch -d <分支名>
  ```
  示例如下：
  ```
  git branch -d branch002          #删除本地仓库中，名为 branch002 的分支，下图为执行成功
  ```
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216315752.png "点击放大")
  
- **删除远程仓库分支**
  ```
  git push <远程仓库地址或别名> -d <分支名>
  ```
  示例如下：
  ```
  git push HTTPSOrigin -d branch002        #从别名为HTTPSOrigin 的远程仓库中删除名为branch002 的分支，下图为删除成功
  ```
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216155896.png "点击放大")
  
- **将本地新建的分支推送到远程仓库**
  ```
  git push <远程仓库地址或别名> <分支名>
  ```
  示例如下：
  ```
  git push HTTPSOrigin branch002        #将本地名为 branch002 的分支，推送到别名为HTTPSOrigin的远程仓库，下图为推送成功
  ```
  ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251275545.png "点击放大")
  
![](https://support.huaweicloud.com/usermanual-codeartsrepo/public_sys-resources/note_3.0-zh-cn.png)
如果推送失败请检查连通性：
确保用户的网络可以访问代码托管服务。
请在Git客户端使用如下测试命令验证网络连通性。
```
ssh -vT git@********.com
```
如果返回内容含有"connect to host \*\*\*\*\*\*\*\*\*\*.com port 22: Connection timed out"，则用户的网络被限制，无法访问代码托管服务，请求助用户本地所属网络管理员。
