【问题标题】:How to sync commits on git如何在 git 上同步提交
【发布时间】:2014-08-12 10:02:05
【问题描述】:

我有一个分支 A,我在其上提交 C1。我从 A 分叉另一个分支;叫它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'

我正试图了解原因。

提前致谢。

【问题讨论】:

    标签: git branch git-branch rebase


    【解决方案1】:

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

    相反,只需使用git merge A合并分支。这样,您最终会得到与您之前发布的任何内容兼容的提交。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      相关资源
      最近更新 更多