news 2026/5/28 1:21:05

一个开发工程师每天怎么用 Git + Gerrit 协作开发代码。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个开发工程师每天怎么用 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 紧急修复分支

作为开发工程师,不建议直接在mastermain上开发新功能。

推荐流程:

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-msghook 自动生成 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 新手错误

这就是开发工程师进入团队协作的基础能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 1:20:06

Python微服务架构设计:构建可扩展的分布式系统

Python微服务架构设计&#xff1a;构建可扩展的分布式系统引言 微服务架构已经成为现代后端开发的主流范式。作为一名从Python转向Rust的后端开发者&#xff0c;我在实践中总结了微服务架构设计的最佳实践。本文将深入探讨Python中微服务架构的设计与实现&#xff0c;帮助你构建…

作者头像 李华
网站建设 2026/5/28 1:20:05

Rust缓存策略:构建高性能数据访问层

Rust缓存策略&#xff1a;构建高性能数据访问层引言 缓存是提升系统性能的关键技术。作为一名从Python转向Rust的后端开发者&#xff0c;我在实践中总结了Rust中缓存策略的最佳实践。本文将深入探讨Rust中的缓存实现策略&#xff0c;帮助你构建高性能的数据访问层。 一、缓存核…

作者头像 李华
网站建设 2026/5/28 1:15:20

解决Keil MDK中ULINK调试器连接LPC4330的Flash烧录问题

1. 问题现象与背景解析 最近在调试NXP LPC4330-Xplorer开发板的SPIFI Flash烧录时&#xff0c;遇到了一个典型的调试器连接问题。具体场景是使用Keil MDK开发环境和ULINKpro调试器&#xff0c;尝试烧录基于Application Note 272的音频录制示例代码时&#xff0c;Vision IDE弹出…

作者头像 李华