本文作为 Git 简明指南,简单介绍了 Git 工作流和 Git 内部实现原理,然后介绍了 Git 常用的配置,列举了 Git 常用的命令。最后,介绍了经典的 Git 分支管理流程。
Git 工作流
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的工作目录(workspace),它持有实际文件;第二个是暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。
git 状态的转换如下图所示:
Git 内部实现原理
Git 是一个内容寻址文件系统。
Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。
每一次提交对应 .git/objects 目录下的一个文件。以该内容加上特定头部信息一起的 SHA-1 校验和为文件命名。 校验和的前两个字符用于命名子目录,余下的 38 个字符则用作文件名。
所有的提交以树的方式组织在一起。
HEAD, master, 分支名,标记,都是一个指针指向某一次提交。
Git 配置
了解以上 Git 工作流和 Git 内部实现原理,有助于更好的使用 Git。为了更好的使用 Git,需要对 Git 进行一些简单的配置。
查看当前配置的命令:
git config --lis |
设置提交用户名和邮箱:
git config --global user.name "username" |
设置所有的 git pull 命令使用 git rebase 而不是 git merge:
git config --global pull.rebase true |
设置别名:
alias.st=status |
其他配置:
color.ui=true |
生成 SSH Key:
ssh-keygen -t rsa -C "" |
完成后,默认保存位置当前用户名下/.ssh/id_rsa 和 id_rsa.pub,分别是私钥和公钥,可以把公钥添加到远端代码托管平台,这样在使用 Git 时就不用输入密码了。
GitHub 可以在 设置 -> SSH and GPG Keys
添加 SSH Key。
Git 常用命令
创建本地仓库
git init # 创建本地仓库 |
添加 & 删除
git add <filename> # 添加文件到暂存区 |
提交
git commit -m "commit message" # 提交修改 |
远程仓库
git remote add origin <server> # 添加远程仓库 |
分支管理
git branch <branch> # 创建分支 |
标记管理
git tag <tagName> # 基于当前 HEAD 创建标记 |
查看历史
git log # 查看提交历史 |
版本回退
git status # 查看工作区、暂存区的状态 |
查看差异
git diff # 查看工作目录和暂存区之间的不同,「如果你现在把所有文件都 add,你会向暂存区中增加哪些内容」 |
储藏和恢复
git stash # 把当前分支所有没提交的代码储藏起来 |
Git 分支管理流程
master 分支
master 分支对应当前生产代码,严禁直接在这个分支上进行开发和提交。
develop 分支
- develop 分支基于 master 分支创建。
- 对应开发主分支,只用于做代码同步,不能直接在这个分支进行开发和提交。
feature 分支
- feature 分支基于 develop 分支创建。
- feature 分支用于新功能的开发、bug 修复等日常开发。
- 使用 git rebase develop 命令及时合并 develop 分支最新代码,防止和 develop 分支越走越远。
- 当合并 develop 分支有冲突时,在 feature 分支进行解决。
- feature 分支开发完成后被合并到 develop 分支。
release 分支
- release 分支基于 develop 分支创建。
- release 分支作为待发布分支,在这个分支进行回归测试和测试问题的修复。
- release 分支开发完成后被合并到 develop 和 master 分支。
hotfix 分支
- hotfix 分支基于 master 分支创建。
- hotfix 分支用于生产问题的紧急修复。
- hotfix 分支开发完成后被合并到 develop 和 master 分支。
代码提交规范
- 不在 dev 开发主分支上直接做提交。
- 基于 dev 分支创建本地 feature 分支进行提交,包括新功能的开发、bug 修复等。
- 每天从服务端拉取 dev 分支最新代码。
- 在本地 feature 分支使用
git rebase dev
命令及时合并 dev 分支最新代码,防止本地分支和 dev 分支越走越远。当合并有冲突时,在本地 feature 分支进行解决 - 提交代码之前先在本地进行测试,确保项目能编译通过,且能够正常运行,不可盲目提交。
- 提交必须要有注释,简要说明本次提交内容。
- 尽量提交原子级的操作,便于恢复。不要一次提交 N 多个文件,然后注释写很长还分好几点,如果是这种情况,建议分成多次提交。