1

我做了一个包含多个文件的提交并将其推送到Gerrit代码审查中。这是HEAD~1.

然后我再次提交,也包含多个文件,并将其推送到 Gerrit 以进行另一次代码审查。这是HEAD.

现在我意识到我需要对提交的一个文件进行更正,HEAD~1但该文件在最近的HEAD提交中也发生了更改。

我是否需要在没有更改的情况下对文件进行HEAD~1更改HEAD,提交它,将提交的 rebase/squash 提交到HEAD~1提交中并将其推送到 Gerrit 中的相同更改中,然后对HEAD提交执行相同的操作?

4

2 回答 2

2

首先,您需要将更改移动到分支:例如,这是您的原始日志

#git log --graph --decorate --oneline -n13
* e40f865 (HEAD, master) Change 2
* 120c061 Change 1
* 73a8f97 Initial commit

现在将它们移动到一个分支中:

#git branch changeA 120c061
#git branch changeB e40f865
#git log --graph --decorate --oneline -n13
* e40f865 (HEAD, master, changeB) Change 2
* 120c061 (changeA) Change 1
* 73a8f97 Initial commit

如您所见,changeB 依赖于changeA。现在重置主节点,以便更改不在主节点中,而是在分支中:

#git reset --hard HEAD~2
HEAD is now at 73a8f97 Initial commit

现在,检查 changeA 并让你改变。修改后的提交:

#git commit --amend -a
[changeA 93837a4] Change 1
 2 files changed, 3 insertions(+), 2 deletions(-)
#git log --graph --decorate --oneline -n13
* 93837a4 (HEAD, changeA) Change 1
* 73a8f97 (master) Initial commit

如您所见,更改 1 有一个新的 SHA1,接下来检查更改 B:

#git checkout changeB
Switched to branch 'changeB'
#git log --graph --decorate --oneline -n13
* e40f865 (HEAD, changeB) Change 2
* 120c061 Change 1
* 73a8f97 (master) Initial commit

现在您看到 changeB 仍然依赖于原始更改 1,您只需要将更改重新设置为新的更改 1。

#git rebase 93837a4
First, rewinding head to replay your work on top of it...
Applying: Change 1
Using index info to reconstruct a base tree...
....
....
Applying: Change 2

#git log --graph --decorate --oneline -n13
* d3fac58 (HEAD, changeB) Change 2
* 93837a4 (changeA) Change 1
* 73a8f97 (master) Initial commit

现在您有了依赖于更新 changeB 的更新 changeB,您可以再次将其提交给 Gerrit 进行审核

于 2013-11-11T01:23:13.997 回答
1

是的:如“当还有第二次更新的评论时如何修改 Gerrit 中的评论问题”中所述

当您在 Gerrit 中有依赖评审(即评审中的一个更改依赖于同时处于评审中的较早更改),并且您需要对较早的更改进行修改时,您实际上必须重新提交这两个更改(因为第二个更改取决于不同的“父”提交)

这涉及:

  • 第三次提交
  • 一个 git rebase -i 重新排序提交
  • git review再一次
于 2013-11-09T09:58:22.587 回答