Files
gerrit/(红头)Git代码提交命令文档.txt
2025-12-22 17:12:39 +08:00

607 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================================
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 <commit-hash>
【切换分支】
# 切换到已存在的分支
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 ProgressWIP
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 <commit-hash>
# 选择性地应用多个提交
git cherry-pick <commit1> <commit2>
# 选择性地应用提交范围
git cherry-pick <commit1>..<commit2>
================================================================================
十二、配置 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
================================================================================
文档结束
================================================================================