一个开发工程师每天怎么用 Git + Gerrit 协作开发代码。
Git + Gerrit 从零到开发工程师学习笔记
1. 为什么开发工程师必须学习 Git
Git 是现代软件开发中最重要的基础工具之一。
它的作用不是简单地“保存代码”,而是帮助开发者管理代码的每一次变化。
如果没有 Git,项目很容易变成这样:
项目_最终版
项目_最终版2
项目_最终版_真的最终版
项目_最终版_老板修改版
Git 可以解决这些问题:
-
我改了哪些代码?
-
谁改了这些代码?
-
什么时候改的?
-
为什么改?
-
改坏了能不能回退?
-
多个人同时开发,怎么合并?
-
上线前怎么审查代码?
所以,Git 是成为开发工程师必须掌握的基础能力。
2. Git 的四个核心区域
Git 最重要的理解模型是:
工作区 -> 暂存区 -> 本地仓库 -> 远程仓库
对应命令是:
修改文件 -> git add -> git commit -> git push
2.1 工作区
工作区就是你电脑上正在编辑的项目文件。
例如:
Program.cs
MainWindow.xaml
LoginService.cs
你修改代码后,这些修改首先只存在于工作区。
查看当前工作区状态:
git status
2.2 暂存区
暂存区可以理解为:
准备放进下一次提交的修改清单
添加某个文件:
git add Program.cs
添加全部修改:
git add .
注意:
git add 不是上传代码,也不是最终提交代码,它只是把修改加入“待提交清单”。
2.3 本地仓库
本地仓库是你电脑里的 Git 历史记录。
提交代码:
git commit -m "实现用户登录功能"
一次 commit 就是一次代码快照。
2.4 远程仓库
远程仓库通常在服务器上,例如:
-
GitHub
-
GitLab
-
Gitee
-
Gerrit 管理的 Git 仓库
普通推送:
git push
Gerrit 常用推送:
git push origin HEAD:refs/for/master
3. Git 常用命令
3.1 查看状态
git status
它可以告诉你:
-
当前在哪个分支
-
哪些文件被修改了
-
哪些文件还没有暂存
-
哪些文件已经准备提交
这是开发中最常用的命令之一。
3.2 查看修改内容
查看未暂存的修改:
git diff
查看已经暂存的修改:
git diff --cached
提交代码前,建议一定先看 diff。
3.3 添加修改
添加指定文件:
git add 文件名
示例:
git add LoginService.cs
添加全部修改:
git add .
3.4 提交代码
git commit -m "修复登录失败问题"
不推荐的提交信息:
git commit -m "修改"
git commit -m "update"
git commit -m "fix"
推荐写法:
git commit -m "修复用户名为空时登录崩溃的问题"
好的 commit message 应该说明:
-
做了什么
-
为什么做
-
修复了什么问题
3.5 查看提交历史
git log
简洁查看:
git log --oneline
3.6 拉取远程代码
git pull
作用:
把远程仓库的最新代码拉到本地
3.7 推送代码
普通 Git 平台:
git push origin 分支名
Gerrit 平台:
git push origin HEAD:refs/for/master
4. Git 分支
分支可以理解为:
从主线代码复制出来的一条独立开发线
常见主分支:
master
main
develop
创建并切换到新分支:
git switch -c feature/login
老版本 Git 也可以使用:
git checkout -b feature/login
常见分支命名:
master/main 稳定主分支
develop 开发主分支
feature/xxx 新功能分支
bugfix/xxx 修复问题分支
release/xxx 发布分支
hotfix/xxx 紧急修复分支
作为开发工程师,不建议直接在 master 或 main 上开发新功能。
推荐流程:
git switch -c feature/my-task
然后在自己的功能分支上开发。
5. Gerrit 是什么
Gerrit 是一个代码评审系统。
它的核心作用是:
让代码在合入主分支前必须经过 Review
GitHub/GitLab 常见流程:
push 分支 -> 创建 Pull Request / Merge Request -> 审查 -> 合并
Gerrit 常见流程:
commit -> push 到 refs/for/目标分支 -> Gerrit 生成 Change -> 审查 -> Submit 合入
Gerrit 常用于:
-
企业内部项目
-
Android 项目
-
嵌入式项目
-
大型团队协作
-
对代码质量要求严格的项目
6. Gerrit 核心概念
6.1 Change
Change 是 Gerrit 中的一次待评审代码变更。
你执行:
git push origin HEAD:refs/for/master
之后,Gerrit 会生成一个 Change 页面。
6.2 Patch Set
Patch Set 是同一个 Change 的不同修改版本。
例如:
Change 1001
Patch Set 1:第一次提交
Patch Set 2:根据评审意见修改
Patch Set 3:继续修复
别人 Review 后让你修改代码,你再次提交后,一般会生成新的 Patch Set。
6.3 Code Review 分数
常见分数:
+2 代码评审通过
+1 看起来不错,但还不能最终通过
0 没有意见
-1 有问题,需要修改
-2 严重问题,不能合入
6.4 Verified
Verified 通常由 CI 系统给分。
+1 编译或测试通过
-1 编译或测试失败
6.5 Submit
当 Code Review 和 Verified 都满足条件后,代码可以 Submit。
Submit 的意思是:
把代码正式合入目标分支
7. Gerrit 标准提交流程
完整流程:
git clone <仓库地址>
cd <项目目录>
git switch -c feature/login
# 修改代码
git status
git diff
git add .
git commit -m "实现用户登录功能"
git push origin HEAD:refs/for/master
如果目标分支是 develop:
git push origin HEAD:refs/for/develop
这条命令的含义是:
把当前分支最新提交推送到 Gerrit,
申请合入 master 或 develop 分支。
8. Gerrit 的 Change-Id
Gerrit 通常要求 commit message 中包含:
Change-Id: Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
示例:
实现用户登录功能
Change-Id: Iabc1234567890abcdef1234567890abcdef1234
Change-Id 的作用是:
让 Gerrit 判断这次提交属于哪个 Change
如果你修改后再次提交,Gerrit 会根据 Change-Id 判断:
这是同一个 Change 的新 Patch Set
而不是创建一个新的 Change。
通常项目会配置 commit-msg hook 自动生成 Change-Id。
9. 修改 Gerrit 评审意见的正确方式
当别人 Review 后要求你修改代码时,常见流程是:
# 修改代码
git add .
git commit --amend
git push origin HEAD:refs/for/master
git commit --amend 的意思是:
修改上一次提交
这样 Gerrit 会生成新的 Patch Set,而不是新的 Change。
10. 新手常见错误
10.1 不知道自己在哪个分支
解决:
git branch
git status
10.2 直接在 master/main 上开发
建议先创建功能分支:
git switch -c feature/my-task
10.3 commit message 写得太随意
不推荐:
update
fix
修改
推荐:
修复登录失败时未提示错误信息的问题
10.4 没有看 diff 就提交
提交前建议执行:
git diff
git diff --cached
10.5 Gerrit 上生成多个无关 Change
常见原因:
-
没有使用
git commit --amend -
Change-Id 发生变化
-
每次修改都重新创建了新的 commit
正确做法:
git commit --amend
git push origin HEAD:refs/for/master
11. 从零到开发工程师的 Git 学习路线
第一阶段:Git 基础
目标:能管理自己的代码。
需要掌握:
git init
git clone
git status
git add
git commit
git log
git diff
git branch
git switch
git pull
git push
第二阶段:团队协作
目标:能和别人一起开发。
需要掌握:
分支管理
解决冲突
合并代码
rebase
cherry-pick
stash
reset
revert
第三阶段:Gerrit 工作流
目标:能完成公司代码评审流程。
需要掌握:
refs/for
Change
Patch Set
Change-Id
Code Review
Verified
Submit
commit --amend
第四阶段:工程习惯
目标:像真正开发工程师一样工作。
需要养成:
提交前看 diff
写清楚 commit message
小步提交
一个 commit 只做一件事
不要提交临时代码
不要提交密码、密钥、配置私密信息
先拉最新代码再开发
遇到冲突会解决
看得懂 Review 意见
第五阶段:开发能力
目标:能独立完成真实项目。
建议学习:
C# 基础
WinForms / WPF
数据库 SQLite / SQL Server
文件读写
网络请求
异常处理
日志系统
打包发布
调试能力
代码结构设计
12. 今天应该掌握的最小闭环
今天先重点掌握这个流程:
git status
git add .
git commit -m "描述本次修改"
git log --oneline
git push origin HEAD:refs/for/master
对应真实开发流程:
查看改了什么
选择要提交的代码
生成本地提交
确认提交历史
推送到 Gerrit 评审
只要真正理解这个闭环,就已经进入开发工程师的基本工作流了。
13. 推荐练习
练习 1:创建本地仓库
mkdir git-demo
cd git-demo
git init
练习 2:创建文件并提交
echo "hello git" > readme.txt
git status
git add readme.txt
git commit -m "添加 readme 文件"
练习 3:查看历史
git log --oneline
练习 4:修改文件并查看差异
echo "second line" >> readme.txt
git diff
练习 5:再次提交
git add .
git commit -m "更新 readme 内容"
14. 学习目标总结
学完 Git + Gerrit 后,你应该能做到:
-
看懂项目当前 Git 状态
-
正确创建分支
-
修改代码后提交 commit
-
看懂提交历史
-
看懂代码差异
-
推送代码到 Gerrit
-
根据 Review 意见修改代码
-
使用 amend 更新 Patch Set
-
理解 Change、Patch Set、Change-Id
-
避免常见 Git 新手错误
这就是开发工程师进入团队协作的基础能力。
更多推荐

所有评论(0)