================================================================================ Gerrit Git 代码提交命令文档 ================================================================================ 文档名称:Gerrit Git 代码提交命令参考 创建日期:2025-12-15 适用版本:Gerrit 3.3.8 服务器地址:http://101.43.95.130:8080 ================================================================================ 一、初始配置 ================================================================================ 【配置 Git 用户信息】 # 全局配置 git config --global user.name "Your Name" git config --global user.email "your_email@example.com" # 项目级别配置 cd /path/to/project git config user.name "Your Name" git config user.email "your_email@example.com" 【配置 Gerrit 服务器】 # 配置 SSH 远程仓库 git remote add origin ssh://renjianbo@101.43.95.130:29418/project-name # 或配置 HTTP 远程仓库(不推荐) git remote add origin http://renjianbo@101.43.95.130:8080/project-name 【安装 commit-msg hook】 # 下载 commit-msg hook(自动添加 Change-Id) cd /path/to/project mkdir -p .git/hooks curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg chmod +x .git/hooks/commit-msg ================================================================================ 二、克隆项目 ================================================================================ 【通过 SSH 克隆(推荐)】 git clone ssh://renjianbo@101.43.95.130:29418/project-name cd project-name 【通过 HTTP 克隆】 git clone http://101.43.95.130:8080/project-name cd project-name # 首次克隆时,如果提示输入用户名,输入:renjianbo # 密码留空(开发模式不需要密码) ================================================================================ 三、基本提交流程 ================================================================================ 【步骤1:修改代码】 # 编辑文件 vim file.txt # 或使用其他编辑器 【步骤2:查看修改】 # 查看工作区状态 git status # 查看具体修改内容 git diff # 查看已暂存的修改 git diff --cached 【步骤3:暂存修改】 # 暂存单个文件 git add file.txt # 暂存所有修改 git add . # 暂存所有修改(包括删除的文件) git add -A # 交互式暂存(选择性地暂存修改) git add -i 【步骤4:提交代码】 # 提交修改(commit-msg hook 会自动添加 Change-Id) git commit -m "Your commit message" # 提交并添加详细描述 git commit -m "Short summary" -m "Detailed description" # 提交时直接编辑提交信息 git commit 【步骤5:推送到 Gerrit 进行评审】 # 推送到评审队列(关键:推送到 refs/for/master) git push origin HEAD:refs/for/master # 推送到其他分支的评审队列 git push origin HEAD:refs/for/develop # 推送到指定分支的评审队列 git push origin HEAD:refs/for/branch-name ================================================================================ 四、修改已提交的代码 ================================================================================ 【修改最后一次提交】 # 修改提交信息(不改变代码) git commit --amend # 修改提交信息(使用编辑器) git commit --amend -m "New commit message" # 添加文件到最后一次提交 git add forgotten-file.txt git commit --amend --no-edit # 修改提交信息但保持 Change-Id 不变 git commit --amend --no-edit 【修改之前的提交】 # 交互式 rebase(修改历史提交) git rebase -i HEAD~3 # 修改最近 3 次提交 # 在交互式界面中,将要修改的提交标记为 "edit" # 然后修改代码,使用: git add . git commit --amend --no-edit git rebase --continue 【重新推送修改后的提交】 # 修改提交后,重新推送到 Gerrit git push origin HEAD:refs/for/master # 如果提示需要 force push,使用: git push origin HEAD:refs/for/master --force ================================================================================ 五、分支操作 ================================================================================ 【创建新分支】 # 基于当前分支创建新分支 git checkout -b feature/new-feature # 基于指定分支创建新分支 git checkout -b feature/new-feature origin/master # 基于指定提交创建新分支 git checkout -b feature/new-feature 【切换分支】 # 切换到已存在的分支 git checkout branch-name # 切换到 master 分支 git checkout master 【查看分支】 # 查看本地分支 git branch # 查看所有分支(包括远程) git branch -a # 查看远程分支 git branch -r 【删除分支】 # 删除本地分支 git branch -d branch-name # 强制删除本地分支 git branch -D branch-name 【推送分支到 Gerrit】 # 推送新分支 git push origin branch-name:refs/for/branch-name # 推送并设置上游分支 git push -u origin branch-name:refs/for/branch-name ================================================================================ 六、查看和比较 ================================================================================ 【查看提交历史】 # 查看提交历史 git log # 查看简洁的提交历史 git log --oneline # 查看图形化的提交历史 git log --graph --oneline --all # 查看最近 N 次提交 git log -n 5 # 查看指定文件的提交历史 git log file.txt # 查看提交的详细修改 git log -p 【查看差异】 # 查看工作区和暂存区的差异 git diff # 查看暂存区和最后一次提交的差异 git diff --cached # 查看工作区和最后一次提交的差异 git diff HEAD # 查看两次提交之间的差异 git diff commit1 commit2 # 查看两个分支之间的差异 git diff branch1 branch2 【查看文件状态】 # 查看工作区状态 git status # 查看简洁的状态 git status -s # 查看详细的文件状态 git status -v ================================================================================ 七、撤销操作 ================================================================================ 【撤销工作区修改】 # 撤销单个文件的修改 git checkout -- file.txt # 撤销所有文件的修改(危险!) git checkout -- . # 使用 restore 命令(Git 2.23+) git restore file.txt git restore . 【撤销暂存区的修改】 # 取消暂存单个文件 git reset HEAD file.txt # 取消暂存所有文件 git reset HEAD # 使用 restore 命令(Git 2.23+) git restore --staged file.txt git restore --staged . 【撤销提交】 # 撤销最后一次提交,保留修改在暂存区 git reset --soft HEAD~1 # 撤销最后一次提交,保留修改在工作区 git reset --mixed HEAD~1 # 或 git reset HEAD~1 # 撤销最后一次提交,完全删除修改(危险!) git reset --hard HEAD~1 ================================================================================ 八、Gerrit 特定操作 ================================================================================ 【推送代码评审】 # 推送到 master 分支的评审队列 git push origin HEAD:refs/for/master # 推送到 develop 分支的评审队列 git push origin HEAD:refs/for/develop # 推送时添加主题(Topic) git push origin HEAD:refs/for/master%topic=feature-name # 推送时添加评审者 git push origin HEAD:refs/for/master%r=reviewer@example.com # 推送时添加多个评审者 git push origin HEAD:refs/for/master%r=reviewer1@example.com,r=reviewer2@example.com # 推送时标记为 Work In Progress(WIP) git push origin HEAD:refs/for/master%wip # 推送时标记为私有(只有评审者可见) git push origin HEAD:refs/for/master%private 【直接推送(跳过评审,不推荐)】 # 直接推送到 master 分支(绕过评审) git push origin HEAD:refs/heads/master # 直接推送到其他分支 git push origin HEAD:refs/heads/branch-name 【查看 Gerrit 变更】 # 查看变更列表(需要安装 gerrit 工具) ssh -p 29418 renjianbo@101.43.95.130 gerrit query status:open # 查看特定变更 ssh -p 29418 renjianbo@101.43.95.130 gerrit query change:1 # 查看我的变更 ssh -p 29418 renjianbo@101.43.95.130 gerrit query owner:renjianbo 【下载变更到本地】 # 下载变更到本地(cherry-pick) git fetch ssh://renjianbo@101.43.95.130:29418/project-name refs/changes/01/1/1 git cherry-pick FETCH_HEAD # 或使用 checkout git fetch ssh://renjianbo@101.43.95.130:29418/project-name refs/changes/01/1/1 git checkout FETCH_HEAD ================================================================================ 九、合并后的操作 ================================================================================ 【更新本地仓库】 # 切换到 master 分支 git checkout master # 拉取最新代码 git pull origin master # 或使用 fetch + merge git fetch origin git merge origin/master 【清理已合并的分支】 # 删除已合并的本地分支 git branch -d feature-branch # 强制删除分支(即使未合并) git branch -D feature-branch # 删除远程分支的引用 git remote prune origin 【同步远程分支】 # 获取所有远程分支信息 git fetch origin # 查看远程分支 git branch -r # 创建本地分支跟踪远程分支 git checkout -b local-branch origin/remote-branch ================================================================================ 十、常用工作流程 ================================================================================ 【工作流程1:创建新功能】 # 1. 更新主分支 git checkout master git pull origin master # 2. 创建功能分支 git checkout -b feature/new-feature # 3. 开发代码 # ... 修改代码 ... # 4. 提交代码 git add . git commit -m "Add new feature" # 5. 推送到 Gerrit 评审 git push origin HEAD:refs/for/master # 6. 在 Gerrit Web 界面进行评审 # 7. 合并后,更新本地仓库 git checkout master git pull origin master git branch -d feature/new-feature 【工作流程2:修复 Bug】 # 1. 从 master 创建修复分支 git checkout master git pull origin master git checkout -b bugfix/fix-issue-123 # 2. 修复代码 # ... 修复代码 ... # 3. 提交修复 git add . git commit -m "Fix issue #123" # 4. 推送到 Gerrit 评审 git push origin HEAD:refs/for/master 【工作流程3:修改已提交的代码】 # 1. 修改代码 # ... 修改代码 ... # 2. 添加到最后一次提交 git add . git commit --amend --no-edit # 3. 重新推送(会自动更新原变更) git push origin HEAD:refs/for/master 【工作流程4:处理评审意见】 # 1. 查看评审意见(在 Gerrit Web 界面) # 2. 修改代码 # ... 根据意见修改代码 ... # 3. 修改提交 git add . git commit --amend --no-edit # 4. 重新推送 git push origin HEAD:refs/for/master ================================================================================ 十一、高级操作 ================================================================================ 【Stash 操作(暂存修改)】 # 暂存当前修改 git stash # 暂存并添加描述 git stash save "Work in progress" # 查看暂存列表 git stash list # 恢复暂存(保留暂存记录) git stash apply # 恢复暂存(删除暂存记录) git stash pop # 删除暂存 git stash drop # 清空所有暂存 git stash clear 【Rebase 操作】 # 将当前分支 rebase 到 master git checkout feature-branch git rebase master # 交互式 rebase(修改最近 3 次提交) git rebase -i HEAD~3 # 中止 rebase git rebase --abort # 继续 rebase git rebase --continue 【Cherry-pick 操作】 # 选择性地应用某个提交 git cherry-pick # 选择性地应用多个提交 git cherry-pick # 选择性地应用提交范围 git cherry-pick .. ================================================================================ 十二、配置 SSH(避免每次输入长命令) ================================================================================ 【创建 SSH 配置文件】 # 创建配置文件 mkdir -p ~/.ssh cat > ~/.ssh/config << 'EOF' Host 101.43.95.130 Port 29418 PubkeyAcceptedKeyTypes +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa EOF # 设置权限 chmod 600 ~/.ssh/config 【配置后可以直接使用】 # 配置后,可以直接使用简短的命令 git push origin HEAD:refs/for/master # 不需要每次都输入: # GIT_SSH_COMMAND="ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa ..." git push ... ================================================================================ 十三、常用命令速查表 ================================================================================ 【日常开发】 git status # 查看状态 git add . # 暂存所有修改 git commit -m "message" # 提交代码 git push origin HEAD:refs/for/master # 推送到 Gerrit 【查看信息】 git log --oneline # 查看提交历史 git diff # 查看修改 git branch # 查看分支 【分支操作】 git checkout -b branch-name # 创建并切换分支 git checkout branch-name # 切换分支 git branch -d branch-name # 删除分支 【撤销操作】 git checkout -- file.txt # 撤销文件修改 git reset HEAD file.txt # 取消暂存 git commit --amend # 修改最后一次提交 【Gerrit 特定】 git push origin HEAD:refs/for/master # 推送评审 git push origin HEAD:refs/for/master%wip # 推送为 WIP git commit --amend --no-edit # 修改提交(保持 Change-Id) ================================================================================ 十四、重要提示 ================================================================================ 1. 推送到 Gerrit 必须使用 refs/for/ 前缀,例如: git push origin HEAD:refs/for/master 不要直接推送到 refs/heads/master(会绕过评审) 2. 每次提交都会自动包含 Change-Id(如果安装了 commit-msg hook) 3. 修改提交后重新推送,会自动更新原变更,不会创建新变更 4. 推送成功后,Gerrit 会返回变更 URL,例如: remote: http://101.43.95.130:8080/c/project/+/1 [NEW] 5. 在 Gerrit Web 界面进行代码评审,不要直接合并到主分支 6. 合并后,记得更新本地仓库: git checkout master git pull origin master 7. 如果遇到问题,查看 Gerrit 日志: cd /home/renjianbo/gerrit_install/review_site tail -f logs/httpd_log ================================================================================ 文档结束 ================================================================================