如何在git上同步提交

如何在git上同步提交,git,branch,git-branch,rebase,Git,Branch,Git Branch,Rebase,我有一个分支a,在该分支上进行提交C1。我从树上叉下另一根树枝;叫它B;并进行提交C2(独立于C1的更改)。现在我回到A,对C1做一些修改。我现在需要用最新的更改来更新B,所以我在B上做了一个“git rebase a”。这会给我带来冲突。是否有一种简单的方法与A同步。我只想覆盖分支B上的C1(实际上,B.C1应该是A.C1的镜像)。或者在重定基址时,我可以指定如下内容: “通过从分支A获取所有更改自动解决冲突” 我总能做到以下几点。从更新的a创建一个新的分支D,并在顶部选择C2。当我这样做并尝

我有一个分支a,在该分支上进行提交C1。我从树上叉下另一根树枝;叫它B;并进行提交C2(独立于C1的更改)。现在我回到A,对C1做一些修改。我现在需要用最新的更改来更新B,所以我在B上做了一个“git rebase a”。这会给我带来冲突。是否有一种简单的方法与A同步。我只想覆盖分支B上的C1(实际上,B.C1应该是A.C1的镜像)。或者在重定基址时,我可以指定如下内容: “通过从分支A获取所有更改自动解决冲突”

我总能做到以下几点。从更新的a创建一个新的分支D,并在顶部选择C2。当我这样做并尝试将我的更改推送到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'
我正在努力理解为什么


提前感谢。

当您重新设置提交的基址时,您将完全重写它们。因此,您将得到与以前的提交对象不兼容的全新提交对象。如果您在本地执行此操作,则这不是问题,但当您之前已经推送了旧的提交(如您的情况)时,它就会成为问题。因为现在,您的远程存储库中有旧的提交,而本地存储库中有重写的提交。这就是为什么一旦发布了提交,就永远不应该重新设置其基础。顺便说一句,樱桃采摘也会发生同样的情况:你正在樱桃采摘的承诺会被完全重写并应用到你的分支上

相反,只需使用
gitmergea
合并分支即可。这样,您将得到与之前可能发布的内容兼容的提交

现在,在您的情况下,要修复这种情况,请执行git push--force。这将覆盖远程存储库分支上的任何内容。所以要小心,当其他人也在访问存储库时,一定不要使用它(因为他们的提交也会中断)。但我想对gerrit来说没关系,因为它会更新变更请求