使用Gerrit和git-review推送特定的祖先提交

时间:2016-01-05 11:43:07

标签: git gerrit git-review

假设我的Git历史记录看起来像这样,从最新到最旧:

* C: WIP: Latest change
* B: WIP: Older changer
* A: Groundwork/housekeeping - review ready
* (origin/master) Existing master commit
* ...

提交B和C正在进行中,我还没有准备好发送审查,但是我有一些家务/基础工作,我已经分成了承诺A并在B和C面前重新定位。我是准备发送此内容进行审核。

我知道我可以在提交A处创建一个新分支并查看,或重置/检出,审核并返回,但是有一个简单的单行程序git-review我可以用来发送这一个提交审查?

2 个答案:

答案 0 :(得分:0)

您可以使用git branch为所需的任何目标提交创建新分支。在您的情况下,如果您想创建一个指向A的新分支,您可以这样做:

git branch newbranch A

您还可以使用checkout -b语法立即查看:

git checkout -b newbranch A

然后,您可以提交该分支及其提交A以供审核。合并后,您可以重新定位BC,以便他们以新origin/master为基础。

答案 1 :(得分:0)

我认为使用git-review是不可能的,但你可以使用raw push命令在没有git-review的情况下执行此操作。

例如,通常没有git-review,您将使用如下命令:

git push origin HEAD:refs/for/master

如果你只想推送一个(只有在A之前的所有提交已经在master)特定提交的情况下才会推送它,例如提交A,你可以使用其哈希而不是HEAD

git push origin A:refs/for/master

但是hash的使用并不是很好,因为你应该知道它并且你可以使用像HEAD~2之类的构造更容易地做到这一点,这将告诉git使用从HEAD开始的第三次提交在您的情况下,它将是A

git push origin HEAD~2:refs/for/master

但像git push origin HEAD~2:refs/for/master这样的构造太长了,而不是它,你可以像这样创建几个git aliases(示例别名下面将始终使用master作为目标分支,因此如果在你的工作流程中您正在使用masterdevelopment之类的多个目标分支,那么您需要为review-master-2review-development-2等每个分支创建别名:

git config --global alias.review-1 'push origin HEAD~1:refs/for/master'
git config --global alias.review-2 'push origin HEAD~2:refs/for/master'
git config --global alias.review-3 'push origin HEAD~3:refs/for/master'
git config --global alias.review-4 'push origin HEAD~4:refs/for/master'
git config --global alias.review-5 'push origin HEAD~5:refs/for/master'

使用别名,你可以使用如下的短命令推送提交A

git review-2