Git 分支/变更未合并,尽管Gerrit声称,它是
每次,我在Gerrit中看到我的更改的Git 分支/变更未合并,尽管Gerrit声称,它是,git,version-control,gerrit,Git,Version Control,Gerrit,每次,我在Gerrit中看到我的更改的merged状态,并且我做了git pull origin,我可以清楚地看到,我的更改/分支实际上还没有合并到master中 请检查我的Gerrit的工作流程,并告诉我,我做错了什么或我遗漏了什么: 在本地创建并签出分支 git签出-b77废话 做魔术和评论所有的变化 git提交-am“更改为77 blah” 使用UI创建同一分支,并将其修订设置为HEAD(此选项) 将更改(该特定分支)推送到Gerrit,并使用适当的引用: git checkout 77
merged
状态,并且我做了git pull origin
,我可以清楚地看到,我的更改/分支实际上还没有合并到master中
请检查我的Gerrit的工作流程,并告诉我,我做错了什么或我遗漏了什么:
git签出-b77废话
git提交-am“更改为77 blah”
HEAD
(此选项)git checkout 77 blah
git推送原点磁头:refs/for/77 blah
Status=Merged
git签出主机
git拉入原点
已经是最新的结束,这(如果我不笨的话)意味着我的主控是最新的。在正常的吉特回购中,这一点是正确的。我的master
分支将是最新的,我最新的(77 blah
)分支已经合并到它了
在Gerrit上,我正在刷新我的网页,我目前正在使用该网页(当我在master
)时,却发现在该特定分支中引入的所有更改都已消失,并且在创建最新分支之前,整个网站处于状态。Gerrit只声称我的主机是最新的
我可以通过执行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的话说)变更被合并了,而实际上根本没有合并?
- 创建本地分支:
git签出-b77 blah origin/master
- 同时创建远程分支:
git push origin 77 blah
或通过Gerrit UI
- 施展魔法,实现它
- 确保本地分支是最新的-
git pull
(我建议git pull--rebase
)
- 推送更改-
git推送原点77 blah:refs/for77 blah
- 将更改提交到远程分支
- 如果需要,将77 blah中的更改合并到主分支,这一步在您的工作流中是不正确的-
git checkout master
,使用git pull
更新所有本地分支,而不是git pull origin
,因为这将由git作为git pull origin/master
解决,在那里还没有新的更改。因此,将77 blah合并到master-git merge origin/77 blah
- 将更改直接推送到远程主机
git推送到源主机
在您的两个类似问题中,一个共同的主题似乎是,您认为应该将本地主题分支推到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/*
上传他们的更改以供审查。他们当然可以在本地创建他们想要的任何分支。让我检查一下。“将更改提交到远程分支”是指审查UI中的更改并提交(因此Gerrit将“合并”它,无论对它意味着什么)?是的,我的意思是-它将把更改合并到相应的远程分支-而不是远程masterSo,你说,我可以创建任意多的本地分支,但始终使用refs/for/master
推送,并且始终只推送主分支,而不创建任何远程分支?但是,如果我这样做的话,我会遇到依赖性的问题,我会有。有人告诉我,使用分支解决了这个问题,因为一个分支放弃的更改不会影响另一个分支的更改。你在这里的陈述怎么样?生活的问题是:是否在杰里特分支?:]如果您为每个独立的更改启动一个新的主题分支,那么最终不会产生任何内部提交依赖项。如果您仔细想想,当您推送一个或多个提交以供审阅时,实际上是在对存储库进行分支。只是您的分支是隐式的、短暂的,并且没有任何附加名称的用处。即使每次更改我都使用每个主题分支,我仍然只需要推送master
分支(使用--all
参数?),并且始终使用refs/for/master
?我做对了吗?为什么要使用--all
选项?由于通常会推送当前签出的分支,git push origin HEAD:refs/for/master
是一种很好的模式。我仍然不明白!我确实做到了,就像你告诉我的:创建本地分支(但不创建cor)