还在努力学习如何使用Gerrit和它的过程。我在哪里做的步骤
change1
推送到gerrit以供评审到头:参考文献/用于/开发change2
推到gerrit,以供评审,并提交给主管:参考文献/ for /develop两次提交都有gerrit更改-ID行。
所以现在我想解决change1
的问题,所以我做了
git checkout -b change1 <change 1's commit id>
进行更改并提交(将更改ID添加到提交消息)
git add .
git commit
现在当我做了
git push origin HEAD:refs/for/develop
我得到了
! [remote rejected] HEAD -> refs/for/develop (squash commits first)
error: failed to push some refs to 'ssh://adrian@192.168.7.100:29418/CommunicationsLibrary'
我如何解决堆叠的评论中的问题,并将其发布到gerrit,而不必再创建另一个评论?
发布于 2012-09-18 18:55:22
当您在Gerrit中有依赖的评审时(也就是说,评审中的一个更改依赖于同时处于评审中的早期更改),并且您需要对早期的更改进行修改,您实际上必须重新提交两个更改(因为第二个更改依赖于不同的“父”提交)。
所以情况是,在主开发分支的单个分支中有两个提交,如下所示:
o master
\
o Commit A (in review, requires change)
o Commit B (in review, no changes required)
在这种情况下,我通常所做的是在第三次提交中对commit A进行更改。我们的提交图现在如下所示:
o master
\
o Commit A (in review, requires change)
o Commit B (in review, no changes required)
o Commit C (modifications to Commit A)
现在,我执行git rebase -i master
并重新排序提交C,使其在提交A之后,但在提交B之前,然后将其压缩到提交A中。提交图现在如下所示:
o master
\
o Commit A' (Commit A, incorporating the changes from Commit C)
o Commit B' (the same changes made in Commit B, but applied to Commit A' instead of A)
最后,git review
(或任何用于提交对Gerrit的更改的命令)重新提交这两个提交给Gerrit。
正是由于这种复杂的情况,大多数人强烈建议在一个单独的分支中处理每个不同的更改,然后在提交给Gerrit之前将其压缩到一个单独的提交中,而不是需要处理这些类型的情况,在这些情况下,您需要同时检查依赖的更改。
发布于 2012-09-18 19:17:21
我认为您的问题与这样一个事实有关:对第一次提交的修正已经将第二次提交作为依赖项。这是我个人会做的,但也许有更好的方法。我看它是因为您想要重基提交的方式,并且处理最后的3。所以运行'git -i HEAD~3‘。这允许你重新基地最后3次提交,通过切换顺序或将它们融合在一起。您应该知道,它以最古老的优先顺序列出了提交。下面是一个例子:
git日志如下:
提交信息:.
信息: foo2
提交信息:.
信息: bar1
提交信息:.
信息: foo1
运行上述命令后,编辑器将弹出以下内容:
选foo1。
选bar1。
选foo2。
(这是假设您的第二个foo更改没有更改bar1更改的任何文件,因为这可能不起作用,如果这样做了,您应该修改提交。)然后将列表更改为:
拾取foo1
固定foo2
拾取bar1
在此之后,您将把foo1和foo2压缩为一个commit,而bar1将是提交的追随者。然后,我会运行'git重置-软头~1‘重置最新的提交,然后'git提交-修改’允许您更改提交的第一次审查,并确保包括更改-id。那就试试你的推。在此之后,您应该设置了一个新的修补程序,第二次更改的所有文件都将被修改,并且仍然在您的工作目录中。
发布于 2020-01-23 02:53:08
“情况就像”特雷弗解释道。当您有此条件时,rebase -i
是一种很好的方法。
就我个人而言,我也使用这个命令,但有一点不同:
1.使用--固定和自动量化的
你有两项承诺:
old commit
new commit
当您想更改旧的提交时,那么
git commit --fixup <old_commit_id>
然后用自动调试器重新定位,
git rebase -i --autosquash <commit_id_before_old_commit>
如果不清楚我的评论,您可以在:https://fle.github.io/git-tip-keep-your-branch-clean-with-fixup-and-autosquash.html中查看详细信息
或
2.利用Gerrit的优势
提交两个更改后,您的GUI上将有两个开放评论更改。
然后转到您的“旧更改”,选择下载->签出此更改,实际上在您签出后,您将转到分支进行此更改,然后修复您的代码,修改,重基,推送.就像你平时一样。
https://stackoverflow.com/questions/12487791
复制