Git版本控制&工作流

Git Version Control
这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手:
- 专为设计师而写的GitHub快速入门教程
- git – 简明指南
- 学习Git的在线互动教程
基本概念
Git是什么?
Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更新和协同开发。甚至有时,中央服务器磁盘故障,恰巧又没有做备份或备份没及时,那就可能有丢失数据的风险。
但Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了,也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间,你也可以提交代码到本地仓库,当协作服务器正常工作后,你再将本地仓库同步到远程仓库。
为什么要使用Git
- 能够对文件版本控制和多人协作开发
- 拥有强大的分支特性,所以能够灵活地以不同的工作流协同开发
- 分布式版本控制系统,即使协作服务器宕机,也能继续提交代码或文件到本地仓库,当协作服务器恢复正常工作时,再将本地仓库同步到远程仓库。
- 当团队中某个成员完成某个功能时,通过pull request操作来通知其他团队成员,其他团队成员能够review code后再合并代码。
Git有哪些特性
- 文件三种状态(modified, staged, committed)
- 直接记录快照,而非差异比较
- 多数操作仅添加操作
- 近乎所有操作都是本地执行
- 时刻保持数据完整性
有关以上特性的详细解释,请查看Pro git的git基础章节
Git基本工作流程
- 在git版本控制的目录下修改某个文件
- 使用git add命令对修改后的文件快照,保存到暂存区域
- 使用git commit命令提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中
Git基本技巧
- 自动补全
- Git 命令别名
关于具体如何使用自动补全和命名别名技巧,请查看Pro git的技巧和窍门
Git版本控制
创建仓库
- git init
- git clone
- git config
保存修改
git add
git commit
查看仓库
- git status
- git log –oneline
撤销修改
查看之前的commit
- git checkout <commit> <file>
- git checkout <commit>
- git checkout <branch>
撤销公共修改
- git revert <commit>
撤销本地修改
- git reset
- git clean
重写Git历史记录
- git commit –amend
- git rebase
- git reflog
Git协作开发
分支
- git branch
- git checkout
- git merge
仓库同步
- git remote
- git fetch
- git pull
- git push
Git工作流
由于git拥有强大的分支特性,它的工作流比较灵活而缺乏约束,于是参考Atlassian Git Tutorial的Comparing Workflows章节提供四种Git工作流:
- Centralized Workflow
- Feature Branch Workflow
- Gitflow Workflow
- Forking Workflow
以上工作流只是参考指南,而不是具体规则。你可以根据自己实际情况来选择适合自己的工作流或微调来满足自己的需要。
Centralized Workflow
过渡到分布式版本控制系统看起来像一个艰巨的任务,但如果你充分利用好git的话,你不必改变你既有的工作流,你的团队可以采用与之前使用SVN一样的方式来开发项目。
如何工作

Centralized Workflow
- 从远程仓库(central repository)克隆工程到本地仓库(local repository) — git clone
- 在本地仓库编辑文件和提交更新 — git add和git commit
- fetch远程仓库已更新的commit到本地仓库和rebase到已更新的commit的上面 —git fetch和git rebase 或 git pull --rebase
- push本地主分支(master branch)到远程仓库 — git push
来源:SamLau