修改提交HEAD~1以进行Gerrit审核,该审核与提交HEAD共享文件

时间:2013-11-08 23:28:56

标签: git gerrit

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

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

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

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

2 个答案:

答案 0 :(得分: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。现在重置master,以便更改不在master中,但实际上在分支中:

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

现在,结帐更改A并让您更改。修改后的提交:

#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进行审核

答案 1 :(得分:1)

是:正如“How to amend review issues in Gerrit when there is a second newer review also

中所述
  

如果您在Gerrit中有依赖性评论(也就是说,评论中的一项更改取决于同时审核的早期更改),并且您需要对之前的更改进行修改,则实际上必须重新提交这两项更改(因为第二次更改依赖于不同的“父”提交)

这涉及:

  • 第三次提交
  • git rebase -i重新排序提交
  • 再次git review