first commit

This commit is contained in:
rjb
2025-12-22 17:12:39 +08:00
commit 1e007fa3f7
107 changed files with 15447 additions and 0 deletions

View File

@@ -0,0 +1,606 @@
================================================================================
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
================================================================================
文档结束
================================================================================