赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
12、命令指南
11、单人团队:连接远程仓库
10、单人团队:使用标签
9、单人团队:在仓库中添加更改
8、单人团队:使用分支工作
7、单人团队:创建本地仓库
6、单人团队:基于 issue 的版本控制
5、工作流
4、分支策略
3、访问模型
2、项目治理
1、团队作战
8、单人团队:使用分支工作
资源编号:76629
Git团队协作
书籍
热度:32
# 5.3.1 列出分支 要列出所有分支(例 5-9) , 你可以使用不加参数的 branch 命令, 或者添加 --list 参数。 在本章开始时,你克隆过一个仓库;在本节中将使用这个仓库,因为它已经包含了你需要 查看的分支。 例5-9 列出本地分支 ``` $ git branch --list ``` 本地分支将以列表的形式输出,如下所示。 ``` * master ``` 在默认情况下,会将 master 分支复制到你的本地仓库中,然后你可以直接在这个分支上工 作。除了这个分支以外,你还下载了远程仓库中所有其他的已有分支。你可以引用这些分 支,但在设置好远程分支的工作副本之前,将无法在这些分支上工作。要列出仓库中的所 有分支,请使用 --all 参数(例 5-10) 。 例 5-10 列出所有分支 ``` $ git branch --all ``` 如果你在克隆仓库的本地副本中执行这个命令, 应该会同时看到你的本地分支和一个远 程分支。 * 表示你当前正在查看(或“签出”)的分支。 剩下几行以 remotes / origin 开头: remotes 仅表示“不在本地”,而 origin 是一种默认约定,表示“我的副本是从这克隆的”。 最后一部分是分支名( master 、 sandbox 和 video-lessons 就是所有的分支了),如下所示。 ``` * master remotes/origin/master remotes/origin/sandbox remotes/origin/video-lessons ``` 不过, 这个列表可能会有些误导。 事实上, 远程分支的名称中不包含 remotes 这个 词。 它只是用来告诉你它所对应的分支类型。 要获得可用的远程分支名的列表, 请使用 --remotes 参数(或缩略为 -r ,例 5-11) 。 例 5-11 列出远程分支 ``` $ git branch --remotes ``` 这个命令将会给你一个仅包含远程分支的列表(使用这些分支的真实名称),如下所示。 ``` origin/master origin/sandbox origin/video-lessons ``` 你可以访问到这些分支,尽管你需要在向它们提交更改之前创建你自己的副本。 # 5.3.2 更新远程分支列表 远程分支列表不会自动更新,因此这个列表将会随着时间而落后。使用 fetch 命令更新这 个列表(例 5-12) 。 例 5-12 获取更新的列表和所有远程分支的内容 ``` $ git fetch ``` 你将在第 7 章中学到更多与远程工作相关的内容。 # 5.3.3 使用不同的分支 当你签出一个分支时, 你更新了系统(工作区)中的可见文件, 来匹配仓库中存储的版本。这个切换是通过 checkout 命令完成的(例 5-13) 。签出过程与 SVN 等集中式版本管理 系统(VCS)有些不同。在集中式 VCS 中,由于分支并没有存储在本地,你需要网络连接 才能使用 checkout 命令,而且必须在使用之前下载这些分支。 例 5-13 使用 checkout 命令切换分支 ``` $ git checkout --track origin/video-lessons Branch video-lessons set up to track remote branch video-lessons from origin. Switched to a new branch 'video-lessons' ``` 在旧版本的 Git 中,这个命令的工作方式有些不同。如果前置命令报错,你可能会选择升 级(参见附录 B) ,或运行下面的变种命令。 ``` $ git checkout --track -b video-lessons origin/video-lessons ``` 这个命令( checkout -b )启用了跟踪( --track ), 从远程仓库 origin 中存储的 videolessons 分支上,创建了一个名为 video-lessons 的新分支。这个远程分支的本地副本可以 通过 origin/video-lessons 访问到,而你自己的分支副本可以通过 video-lessons 访问到。 你现在应该已经有了远程分支 video-lesson 的一份本地副本(图 5-3) 。 ![image.png](http://file.handsomemark.com/file/2020/05/15/18d38db6-967a-11ea-b6ea-00163e12d51c.png) 图 5-3:远程分支的本地副本已经创建 在你的分支列表中,似乎这个分支出现了两次,这是因为其中一次代表远程仓库中的引用 信息,如下所示。 ``` $ git branch -a master * video-lessons remotes/origin/master remotes/origin/sandbox remotes/origin/video-lessons ``` 从新的分支上,你可以使用例 5-22或例5-23来查看历史记录。注意,两个分支中的提交 历史是不一样的。 # 5.3.4 创建新的分支 对于小型项目来说, 我愉快地将 master 分支中的每个提交都视为一个问题解决方案。 但是,当团队规模增长时,确立团队结构的协作方式将会使你越来越多地受益。第 3 章讲到 了你可能想在你的团队中采用的分支策略。作为独立开发者,你或许更难明白什么时候你 应该在一个不同的分支上工作。为了帮助你作出决定,请问自己以下几个问题。 • 如果进行得不顺利,我是否会想要完全丢弃这个想法? • 我正在创造的东西是否严重偏离了当前发布的软件版本? • 在进行发布或被软件的发布版本接受之前,我的工作是否需要经过评审? • 完成这项工作之前,我是否有可能切换到其他任务上去? 当你创建了一个新的分支,此时这个分支包含了与原分支相同的历史记录(图 5-4) 。当你 使用 log 命令查看新的分支的历史记录时,祖先分支中的提交也会显示出来。 ![image.png](http://file.handsomemark.com/file/2020/05/15/6345afc8-967a-11ea-b6ea-00163e12d51c.png) 图 5-4:新的分支包含祖先分支中的相同提交 假设你在使用基于 issue 的版本控制,你的分支名应该能够反映你正在工作的工单。例如, 如果 issue 是“1: Add process notes to README” (在 README 中添加过程备忘),那么分 支应该被命名为 1-process_notes 。新分支的历史将会包括当前所有提交,因此确保你从正 确的起点开始新的分支。你可以通过 checkout 命令来移动到正确的分支(例 5-14) ,或者 你可以将你想要的父分支添加到你的命令中(例 5-15) 。 例 5-14 创建一个新的开发分支 首先签出你希望作为起点使用的分支,如下所示。 ``` $ git checkout master Switched to branch 'master' ``` 然后,创建一个新的分支,如下所示。 ``` $ git branch 1-process_notes [没有消息显示] ``` 最后,签出新分支,如下所示。 ``` $ git checkout 1-process_notes Switched to branch '1-process_notes' ``` 尽管要记的东西有点多, 但例 5-15 的优点是可以直接从正确的基线分支创建一个新的分 支,这意味着你不需要记住之前的指令来执行额外的签出步骤。 例5-15从主分支创建一个新的开发分支 `` $ git checkout -b 1-process_notes master Switched to a new branch '1-process_notes' ``` 一旦你签出到新的分支,就可以继续完成你的工作。