# 版本控制的最佳实践
## 提交对映改动
一次提交要包括一个相关改动。例如,对于两个错误的修复应该进行两次不同的提交。精简的提交可以让其他的开发团队人员更简单地明白其改动的用义。如果其中一次提交的改动出现了问题,也可以方便地回滚到改动之前的状态。借助暂存功能来标记相关的改动文件,Git 可以为你打造出非常精准的提交。
## 频繁地提交改动
经常性地提交改动可以确保不会出现特别庞大的提交,同时也可以比较精准地对应到所需要的改动上。此外,通过频繁地提交也可以比较快速地和其他开发人员来共享你的改动。同样也会避免在整合代码时出现过多的合并冲突。相反的,非常庞大的提交会加大整合代码时出现冲突的风险,解决这些冲突也会非常复杂。
## 不要提交不完整的改动
虽然原则上来说不要提交一些还没有完成的改动,但是对于一个非常庞大的新功能来说,也并不意味着你必须整体完成这个功能后才可以提交。恰恰相反,你必须把那些改动正确地分割成一些有意义的逻辑模块来进行频繁地提交。如果你仅仅是因为急着想要下班,或者是想要得到一个干净的工作副本(比如想要切换到另一个分支上),你可以利用 Git 所提供的储藏(Stash)功能来解决这些问题。切记不要把那些不完整的改动提交到仓库中。
## 提交前测试那些改动
不要理所当然地认为自己完成的改动都是正确的。所有的改动一定要通过彻底地测试才表示它真正地被完成了。尽管这些改动可能仅仅是提交到了你的本地仓库中,只有你自己才能看到,但完整的测试同样是非常重要的,因为这些代码可能之后会被推送和共享到远程给其他的开发人员。
## 高质量的提交注释
提交注释的标题需要一个少于50个字符的简短说明。在一个空白的分割行之后要对改动的细节进行一个详细地描述。例如尝试着回答两个问题:出于什么原因需要进行这次修改?具体改动了些什么?为了和自动生成的提交注释保持一致(例如 git merge 可能会自动生成提交),一定要使用现在时祈使句(例如要使用 change ,而不要使用 changed 和 changes)。
## 版本控制不是备份系统
版本控制系统具有一个很强大的附带功能,那就是服务器端的备份功能。但是千万不要把 VCS 仅仅当成一个备份系统。特别需要注意的是,只能提交那些有意义的改动。VCS 不是用来备份文件用的。(请参阅 <提交对映改动>)
## 使用分支功能
分支是 Git 一个非常强大的功能,当然这不是偶然的。自始至终,Git 的宗旨就是提供一个即快速又简单的分支功能。它是一个优秀的工具,并且可以帮助解决开发人员在日常工作中存在的代码冲突的问题,因此分支功能应该广泛地被运用在不同的开发主题中。比如添加新功能,修复错误,尝试新的想法等等。
## 遵循一个工作流程
Git 可以支持很多不同的工作流程:长期分支、功能分支、合并以及 rebase、git-flow 等等。选择什么样的开发流程要取决如下一些因素:项目开发的类型,部署模式和(可能是最重要的)开发团队成员的个人习惯。不管怎样,选择什么样的流程都需要得到所有开发成员的一致认可,并且一直遵循它。
- Learn Version Control with Git 中文版
- 前言
- Part 1 - 基础知识
- 什么是版本控制?
- 为什么要使用版本控制系统?
- 准备工作
- 版本控制的基本工作流程
- 从一个未被纳入版本控制的项目开始
- 从一个已被纳入版本控制的项目开始
- 工作在你的项目上
- Part 2 - 分支与合并
- 分支可以改变你的生命
- 在分支上工作
- 暂时保存更改
- 切换一个本地分支
- 合并改动
- 分支的工作流程
- Part 3 - 远程仓库
- 关于远程仓库
- 连接一个远程仓库
- 查看远程数据
- 整合远程的改动
- 发布一个本地分支
- 删除分支
- Part 4 - 高级应用
- 撤销操作
- 用 diff 来检查改动
- 处理合并冲突
- Rebase 代替合并
- 子模块
- git-flow 的工作流程
- 使用 SSH 公钥验证
- Part 5 - 工具与服务
- 桌面应用程序
- 比较和整合工具
- 代码托管服务
- 更多学习资源
- 附录
- 版本控制的最佳实践
- 命令 101
- 从 Subversion 过渡到 Git
- 为什么选择 Git