【问题标题】:git pull rebase while keeping remote on the topgit pull rebase 同时保持远程在顶部
【发布时间】:2020-11-07 08:58:42
【问题描述】:

我有一个提交 A B C 的本地仓库和一个提交 D E F 的远程仓库。在他们的历史中没有什么共同点。

我想要一个拉取远程提交并将它们放在本地提交的顶部,这样最后我就有了: A B C D E F 以 F 为 HEAD

我试过 git pull --rebase 但它把本地放在顶部:D ​​E F A B C

如何通过 repo 忽略它们的不同历史,在本地之上获得远程?

【问题讨论】:

    标签: git rebase


    【解决方案1】:

    git pull --rebasegit fetchgit rebase origin/<branch> 的组合,当然它是这样做的,因为您不能将您的更改推送到服务器上已经存在的更改之下,而无需重写服务器历史记录,因此会破坏其他所有人的分支。

    如果你真的需要这样做:

    1. git checkout -b <new> origin/<branch> 用 D E F 创建新分支
    2. git rebase <branch> rebase 到 A B C

    【讨论】:

    • 当我遵循您的解决方案时,我遇到了合并冲突。我能从这里做什么?
    • 只需像在任何合并或变基中一样解决冲突。 git status 会告诉你该怎么做。你会以任何其他方式得到冲突。
    • 我解决了所有的冲突。 rebase 是成功的。现在当我运行 git status 时,我得到你的分支和 'origin/main' 已经分歧,并且分别有 15 和 12 个不同的提交。
    • 这是我警告过你的。您现在必须覆盖服务器上的历史记录并停止从那里开始的所有分支。只有当 DEF 包含 12 个提交时,12 才应该存在!如果您确定需要这样做,请执行git push --force-with-lease
    【解决方案2】:

    我可以从您的案例中推断出,假设存在以下历史并且当前分支是“本地”:

          A---B---C local
         /
    D---E---F <master/remote>
    

    您可以执行以下两件事。

    从此时开始,以下任一命令的结果:您可以签出分支并将远程重新定位到分支。

    git rebase master
    git rebase master local_branch
    

                  A'--B'--C' topic
                 /
        D---E---F master
    

    注意:后一种形式只是git checkout topic 后跟git rebase master 的简写形式。当 rebase 退出时,主题将保持已签出的分支。

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2021-11-17
      • 2017-12-07
      • 1970-01-01
      • 2021-08-16
      • 2013-03-14
      • 2014-02-17
      • 2012-06-10
      • 2018-08-02
      相关资源
      最近更新 更多