我有一个分支A,我在其上进行提交C1。我从A分叉另一个分支;叫它B;并提交C2(更改独立于C1)。现在稍后我回到A并对C1进行一些更改。我现在需要用最新的更改来更新B,所以我在B上做了一个“git rebase A”。这给了我冲突。有没有一种简单的方法与A同步。我只想覆盖分支B上的C1(实际上B.C1应该是A.C1的镜像)。或者在变基础时,我可以指定以下内容: “通过从分支A”
获取所有更改来自动解决冲突我总能做到以下几点。从更新的A和樱桃挑选C2创建一个新的分支D.当我这样做并尝试将我的更改推送到gerrit时(在更新D.C2之后)我得到错误:
To ssh://xxxx@gerrit.xxxx:29418/xxxxx
! [remote rejected] HEAD -> refs/for/master (no changes made)
error: failed to push some refs to 'ssh://xxxx@gerrit.xxxx:29418/xxxxx'
我想了解原因。
提前致谢。
答案 0 :(得分:1)
当您重新提交提交时,完全重写。因此,您最终得到的全新提交对象与之前的提交对象不兼容。如果您在本地执行此操作,这不是问题,但是在您之前已经推送旧提交(如您的情况)之后,它就会成为一个问题。因为现在,您在远程存储库上拥有旧提交,并在本地存储库中重写了提交。这就是为什么一旦你发布它们就不应该重新提交。采摘樱桃时也会发生同样的事情:你正在挑选的提交被完全重写并应用在你的分支之上。
相反,只需使用git merge A
合并分支。这样,您最终会提交与您之前发布的内容兼容的提交。
现在,在你的情况下,要修复这种情况,请git push --force
。这将覆盖远程存储库分支上的任何内容。所以要小心这一点,当其他人也访问存储库时,肯定不要使用它(因为他们的提交也会破坏)。但是我觉得gerrit没关系,因为它会更新变更请求。