我做了一个包含多个文件的提交,并将其推送到Gerrit
进行代码审查。这是HEAD~1
。
然后我做了另一个提交,也包含多个文件并将其推送到Gerrit进行另一次代码审查。这是HEAD
。
现在我意识到我需要对提交HEAD~1
的一个文件进行更正,但该文件也在最近的HEAD
提交中进行了更改。
我是否需要对HEAD~1
的文件进行更改而不进行HEAD
中的更改,提交,提交到HEAD~1
提交的rebase / squash并将其推送到Gerrit中的相同更改,然后对HEAD
提交执行相同的操作?
答案 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 review