每次,我在Gerrit的更改中看到merged
状态,我git pull origin
,我可以清楚地看到,我的更改/分支实际上并未合并为主。
请查看我的Gerrit的工作流程并告诉我,我做错了什么或我错过了什么:
创建&结账分支在当地。
git checkout -b 77-blah
魔术并评论所有更改。
git commit -am "changes to 77-blah"
使用用户界面创建相同的分支,并将其修订版设置为HEAD
(此should be automated soon)。
将更改(特定分支)推送到Gerrit,并使用正确的引用refs:
git checkout 77-blah
git push origin HEAD:refs/for/77-blah
访问网址,Gerrit给了我,审核了我的更改或等待其他人审核。
再次访问更改的网址,确保Status = Merged
。
从Gerrit获取最新更改:
git checkout master
git pull origin
最后一个命令的结果以Already up-to-date
结束,如果我不是傻瓜,则意味着我的主人是最新的。在正常的Git的回购中,在这一点上,这将是真的。我的master
分支将变为最新,我的最新(77-blah
)分支已经合并到它。
关于Gerrit我正在刷新我的网页,我正在工作(当我在master
时)只是发现,该特定分支中引入的所有更改都已消失,整个网站在创建最新分支之前处于状态。 Gerrit 仅声明,我的master
是最新的。
我可以通过执行git branch -d 77-blah
并获得结果来确认:
error: The branch '77-blah' is not fully merged.
If you are sure you want to delete it, run 'git branch -D 77-blah'.
实际上,我必须在本地手动合并我的最新分支。我错过了什么?
在Gerrit术语中,改变是合并是什么意思,而实际根本没有合并?
答案 0 :(得分:3)
您几个类似问题中的一个共同主题似乎是您认为应该将您的本地主题分支推送到Gerrit中具有相同名称的分支,并提交更改(即将更改显示为合并)表示Gerrit应将更改合并到master
。这是不正确的。
当您推送到refs/for/whatever
并稍后提交更改时,提交将在分支whatever
上结束。不是master
。如果您希望更改以master
结尾,则应推送至refs/for/master
。因此,Git声称master
是最新的是正确的(该分支不受您对77-blah
的更改提交的影响)并且Gerrit声称您的更改已合并也是正确的(更改是合并到77-blah
)。
本地主题分支与服务器上维护的分支无关。在他们之间建立1:1的关系是不寻常的,也很少需要。实际上,在Gerrit服务器上创建分支(即具有refs/heads/*
的推送权限)通常是大多数用户无法执行的特权操作。他们可以做的是推送到refs/for/*
上传他们的更改以供审核。在当地,他们可以创建他们想要的任何分支。
答案 1 :(得分:1)
git checkout -b 77-blah origin/master
git push origin 77-blah
或通过Gerrit UI。git pull
(我推荐git pull --rebase
)git push origin 77-blah:refs/for77-blah
git checkout master
并使用git pull
更新所有本地分支而不是{{1}因为这将由git解决为git pull origin
,其中还没有新的变化。所以将77-blah合并到主人 - git pull origin/master
git merge origin/77-blah