Git 修改Gerrit review的提交头~1,该文件与提交头共享

Git 修改Gerrit review的提交头~1,该文件与提交头共享,git,gerrit,Git,Gerrit,我做了一个包含多个文件的提交,并将其推入Gerrit进行代码审查。这是HEAD~1 然后我进行了另一次提交,也包含多个文件,并将其推送到Gerrit中进行另一次代码审查。这是头 现在我意识到我需要为提交HEAD~1对一个文件进行更正,但该文件在最近的HEAD提交中也发生了更改 我是否需要对HEAD~1的文件进行更改而不更改HEAD,提交它,将提交到HEAD~1commit中的文件重新基址/压缩,并将其推到Gerrit中的相同更改中,然后对HEAD提交执行相同的更改?是:如中所述“” 当您在Ger

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

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

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

我是否需要对
HEAD~1
的文件进行更改而不更改
HEAD
,提交它,将提交到
HEAD~1
commit中的文件重新基址/压缩,并将其推到Gerrit中的相同更改中,然后对
HEAD
提交执行相同的更改?

是:如中所述“”

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

这涉及:

  • 第三次犯罪
  • 一个git rebase-i来重新排序提交
  • 再次查看git的

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

#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仍然依赖于原始的change1,您只需要将更改重定为新的change1

#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

现在您有了更新的变更B,它取决于更新变更B,您可以再次提交给Gerrit进行审查

,这似乎比我的答案更详细+1当我将REBASE变更为Gerrit时,它创建了一个全新的代码审查项目,但我希望它修改现有的项目。有办法吗?我想你的提交消息中有ChangeID?然后您是否使用--amend来修改您的提交?只需检查changeid是否没有更改。