深入理解 GitHub Flow
GitHub Flow 是一个轻量级,基于分支的工作流,支持团队和项目的定期部署。本指南介绍了 GitHub Flow 的工作原理。
Step 1. 创建分支(Create a branch)
当你操作一个项目的时候,无论其他协作者做什么,你都可以在特定的分支上实现自己的想法。也就是说,分支的存在是帮助你管理这些工作流。
在你创建了一个项目的分支的时候,你也就创建了一个可以尝试你的新想法的环境。在分支上做的更改不会影响master
分支,所以你可以自由地进行实验和提交更改,这些操作都是安全的。当然,只有你完成的代码被协作人审阅并通过的时候,才可以被合并。
提示(ProTip)
分支是 Git 中的核心概念,而且整个 GitHub Flow 也是基于此的。在这里,只有一条规则,那就是:master
分支中任何内容都是可以被展开的。
正因为如此,新分支在实现一个功能或修复一个程序的时候是非常重要的。你的分支名称应该具有描述性(例如,refactor-authentication
、user-content-cache-key
、make-retina-avatars
),以便其他人通过分支名称就可以知道它到底是干什么用的。
Step 2. 添加提交(Add commit)
只要你创建了分支,就说明你要对它进行修改啦!无论添加、修改、还是删除文件,你都必须进行提交,将它们同步到你的分支上。当你在分支上工作的时候,这些提交操作可以跟踪你的工作进度。
提交操作也建立一个关于你工作的透明历史,通过查看这些提交记录,其他人可以知道你做了什么和为什么这么做。每个提交操作都有一个相关的提交信息(Commit messages),用于描述你做出的修改。此外, 每一个提交操作都被视为一个“修改单元”。如果发现了 bug 或者决定走不同的开发方向,你也可以通过这些“修改单元”进行回滚操作。
提示(ProTip)
提交信息非常的重要,特别是当你将修改的内容提交到服务器之后,Git 可以追踪到你的修改内容并展示它们。通过写清楚的提交信息,你可以让其他人更容易跟上我们的思路并提供反馈。
Step 3. 提出 Pull 请求(Open a pull request)
Pull 请求开启了一个关于你的提交内容的讨论。因为他们与底层 Git 仓库紧密集成,所以如果他们接受你的请求,任何人都可以准确地看到合并的变化。
你可以在开发过程中的任何时候提出一个 Pull 请求:当你有很少或没有代码但想分享一些截图或一些想法的时候;当你卡住了需要帮助或建议的时候;或者当你准备好了让人来审查你工作的时候。在你写 Pull 请求信息的时候,通过使用 GitHub 的@mention system
,你可以向特定的人或团队反馈问题,无论他们在你身边还是在 10 个时区之外。
提示(ProTip)
Pull 请求对于促进开源项目和管理共享库的更改非常有用。如果你使用Fork & Pull Model
,Pull 请求提供一种方式来通知工程维护人员关于你希望他们考虑的变化。如果使用Shared Repository Model
,则在将它们合并到主分支前,Pull 请求帮助启动代码审查和有关更改建议的会话。
Step 4. 讨论和评估你的代码(Discuss and review your code)
当你提出 Pull 请求的时候,审查你的更改内容的人或团队可能有一些问题或者意见。也许你的编码风格与项目规范不符,或者缺少单元测试,也有可能所有的东西看起来都很棒,条理清晰。Pull 请求的目的就是鼓励和捕捉这种类型的对话。
你也可以在大家讨论和给出关于你提交内容的反馈时,继续 Push 你的分支。如果有人评论说你什么没有做,或者代码中有 bug,你也可以及时把它修复,然后 Push 这些修改。GitHub 将会给你展示出最新评论和反馈,你也可以在 Pull 请求的视图中统一接收这些消息。
提示(ProTip)
Pull 请求的评论是用 Markdown 编辑的,因此你可以在评论中嵌入图片、表情符号、使用预格式化文本块,以及其他轻量级的格式。
Step 5. 部署(Deploy)
只要你的 Pull 请求被审查并且通过了你的测试,你就可以部署这些修改,在生产环境中验证她们。如果分支发生了问题,你也可以回滚到之前的状态。
Step 6. 合并(Merge)
现在, 你修改的内容已经在生产环境中验证了,是时候将你的代码合并到master
分支啦!合并之后,Pull 请求就保存了一份关于你修改代码的历史记录。因为它们是可搜索的,所有任何人都可以通过搜索了解你为什么这么修改以及如何修改的。
提示(ProTip)
通过将某些关键字加入到你的 Pull 请求文本中,你可以将问题与代码关联起来。当你的 Pull 请求被合并时,相关问题也将被关闭。例如,输入短语Closes #32
,将关闭仓库中序号为 32 的问题。此外,可以通过我们的「帮助文章」,了解更多的信息.