git提交与gerrit代码审查细节
git提交与gerrit代码审查细节
代码拉取和提交
- 配置config文件
1
2
3
4
5Host gerrit
HostName 10.10.1.127
Port 29418
User 1016739
IdentityFile ~/.ssh/id_ed25519 - 克隆
1
git clone "ssh://gerrit/<project path>" my-project && cd my-project && f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" http://10.10.1.127:30090/tools/hooks/commit-msg; chmod +x "$f"
- 仅克隆某个分支到本地目录
1
git clone -b <分支名> --single-branch <仓库地址> <目标目录>
代码补充提交
1 | git add . |
一般用于以下情况,例如:
未推送
针对已修改的代码一般操作是git add然后git commit,此时这个提交的功能又有需要补充修改的,但又不想再次创建一个新的提交。审核被废弃
废弃后就不在待审核列表了,本地可以保留原提交信息,仅更改需要更改的,或者git reset HEAD^。审核被打回
打回的提交就不会被合并,本地需要修改问题,按上述指令再次提交;审查人可以看提交明细中的最新版本,若已修改完毕,则可以+2通过,执行合并。
若要修改更早的未合并的提交
git commit --amend 只能修改最近的一次提交(即 HEAD 指向的提交),不能用于修改之前的某个提交。
为什么 --amend 不能修改更早的提交?
git commit --amend 的作用是:
- 替换最近一次提交(HEAD),
- 使用你当前暂存区的内容(如果有修改)和新的提交信息(如果指定),
- 生成一个新的提交,其父提交是原提交的父提交。
由于 Git 的提交历史是链式结构,修改一个中间的提交会改变其哈希值,从而导致后续所有提交的父哈希不一致,破坏了历史的连续性。因此 Git 不允许直接“原地修改”一个非最新的提交。
如果你想修改之前的某个提交,应该使用:
✅ git rebase -i(交互式变基)
这是最常用的方法。
步骤示例:
找到你想修改的提交之前的提交(比如你想修改倒数第3个提交):
1
git rebase -i HEAD~3
这会打开编辑器,列出最近3次提交,从最旧到最新。
在编辑器中,将你想修改的提交前的
pick改为edit(或e):1
2
3edit abc1234 Add feature X
pick def5678 Fix bug Y
pick xyz9012 Update docs保存并退出,Git 会在
abc1234提交后暂停。此时你可以:
- 修改文件,
git add相关更改。
完成修改后,执行:
1
git commit --amend
(这时
--amend是合法的,因为 HEAD 正好停在你要改的提交上)然后继续变基:
1
git rebase --continue
Git 会重新应用后续的提交,形成新的历史。
⚠️ 注意事项:
rebase -i会重写提交历史。如果这些提交已经推送到共享仓库,重写历史会导致协作者出现问题。- 在重写历史前,建议备份分支:
git branch backup-branch-name
总结
| 情况 | 命令 |
|---|---|
| 修改最近一次提交 | git commit --amend ✅ |
| 修改之前的某个提交 | git rebase -i + git commit --amend ✅ |
直接用 --amend 改旧提交 |
❌ 不可能 |
所以,想改旧提交?用 git rebase -i 是正道。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Fleming's Blog!






