序
- 本文记录了 git 与 gerrit 学习所得
- 重点关注于当前所用到的实际操作部分,其余理论部分以及更复杂用法留待将来用到时继续补充
1 Git 与 Gerrit
- Git 是当前全世界流行的分布式版本控制工具,但是只适用于纯文本文件,包括markdown、网页、代码等,一般不用于图片、视频、.doc文档等
- 实际上是在当前目录下新建一个名为 .git 的隐藏文件夹,作为本地仓库 / 版本库(Repository),切记不可手动直接修改内容
- Gerrit = Git + 强制代码审核
- 只有通过了代码审核,才能提交至远程仓库然后合并(merge)
2 Git使用
2.1 一些概念
2.1.1 四块区域
git 在具体使用中,可分为三个区域:
- 工作区(Working Directory):实际代码文件等存放的地方
- 暂存区(Stage / Index):已经完成修改,等待最终提交文件的存放之处
- 本地仓库 / 版本库(Repository):当前分支的最终更改提交处
加上远程仓库,实际可视为使用不同命令,实现文件在四个区域之间来回传输
2.1.2 本地与远程
- 相较于传统的SVN等集中式版本控制系统,git 的最大优势在于无论有无网络,皆可工作:即可以把仓库建在本地,也可以建在远程服务器
- 可以先在本地修改,完成后推送到远程服务器,或者是不通过服务器直接互相交换
- 远程仓库既可以作为备份,又可以让其他人通过该仓库来协作
- GitHub上免费托管的Git仓库,任何人都可以看到(但只有你自己才能改)因此不能把敏感信息放进去
2.1.3 分支
- 每一次 commit 可视为增加一个时间节点,因此整个写代码、改代码、提交代码的过程可以串成一条时间线
- 这条时间线即为默认状态下所用的 master 分支
- 当多人合作,或者避免在主线上做改动,可以新建分支,例如 develop 分支:
- 在 develop 分支中的修改完成后可以与 master 中的代码 合并(merge),然后删掉 develop 分支
- 也可以继续增加分支适应不同删改需求:
2.2 流程
2.2.1 初始化
- 用户配置
- git config --global user.name "Your Name"
- git config --global user.email "email@example.com"
- 加了 “ --global ” 后,本台机器所有仓库都使用这个用户配置
- 仓库建立
- git init:建立仓库
- 只能监控当前目录与子目录下的文件更改
2.2.2 提交修改
2.2.3 撤回修改
- 文件在版本库/仓库需要撤销:
- 即,版本回退,流程如下:
- 文件在暂存区,需要撤销更改且需要退回工作区
- git reset HEAD < file >
- 撤销一次 git add,即将暂存区中的文件撤回到工作区
- 文件在暂存区,需要撤销更改但不需要退回工作区
- git check --< file >
- 撤销回到最近一次 git add 状态,即刚 add 时的状态
- 文件在工作区,需要撤销更改
- git check --< file >
- 撤销回到最近一次 git commit 状态,即与版本库/仓库中相同的版本
2.3 命令
- git init:在当前目录下新建本地仓库
- git pull:取回远程仓库代码,并于本地的合并
- 实际上 git pull = git fetch + git merge
- git add < file >:将 file 加入监控
- git status:查看暂存区状态
- git diff:查看修改(缓存区文件 V.S. 原始文件)
- git reset:将暂存区的文档退回至工作区
- git commit -m " <说明>":将暂存区中的文件提交至本地仓库,并附上<说明>
- git log:查看上传记录(只有当次的操作记录)
- --pretty=oneline:查看上传记录,且每条记录缩写至一行内
- git reflog:查看所有历史命令与版本提交号
- git checkout:查看当前分支
- -a:查看所有分支
- <分支>:切换到<分支>