【问题标题】:How can I rebase after a merge?合并后如何变基?
【发布时间】:2019-09-27 04:36:22
【问题描述】:

我正在阅读 Pro Git 书籍,但在变基时遇到了困难。

以下是场景:

所以两个分支已经合并了。然后书上说,在我们进行合并后,我们仍然可以改变主意,将 C4 重新设置为 C5,如下所示:

但我尝试复制变基,发现在进行合并后,如果我尝试,我将无法再变基:

git checkout branch_on_c4

git rebase branch_on_c5

我没有收到C4' 的新提交,消息是:

首先,倒带头在上面重播你的工作

申请:添加

使用索引信息重建基础树

回退到修补基础和 3 路合并

无更改 -- 已应用补丁**

如果我没有先合并两个分支,我在 C5 上重新定位 C4 没有问题。但是一旦我完成了合并,我就不能再变基了,那么作者是如何或作者在合并后使用什么命令进行变基的呢?

【问题讨论】:

    标签: git


    【解决方案1】:

    tl;dr

    合并后如何重新设置基准?

    你不需要,这不是书上说的。如果你不喜欢合并,就扔掉它,然后用 rebase 代替


    然后书上说在我们进行合并后,我们仍然可以改变主意来变基

    不,它没有。

    says

    ...如果不是在 [this happens] 时进行合并,而是运行 git rebase teamone/master ...

    也就是说,而不是合并,而不是之后。

    因此,您要么必须运行fetch 并提前识别潜在问题,要么运行正常的合并pull,确定它是一团糟并扔掉它重新开始:

    git reset --hard HEAD@{1}
    

    (我倾向于避免使用 HEAD~1 语法进行合并,因为我不想考虑哪个父级是哪个父级 - “HEAD 的先前值”的 reflog 语法更简单 IMO)。

    【讨论】:

      【解决方案2】:

      我假设您在这里指的是图 45 和图 46:Git Branching Rebasing

      接下来,推送合并工作的人决定返回并改用 rebase 他们的工作;他们执行 git push --force 来覆盖服务器上的历史记录。然后,您从该服务器获取数据,取消新的提交。

      那个人很可能做了一些事情来撤消合并,例如:

      git reset --hard HEAD~1
      

      然后就可以执行rebasepush --force了。

      【讨论】:

      • 感谢您的回答。是的,我指的是这本书的那一部分。书中还提到了两个提交的作者、日期相同,作者是指C4`和C6吗?
      • 我认为它们的意思是 C4 和 C4'。您将在日志中同时拥有它们,因为您已经下载了该人完成的两个历史记录 - 合并一个和重新设置一个。顺便说一句,我建议从其他来源学习 Git。使用 Git 时我很有信心,但是我很难跟上这本书。查看 Atlassian 教程,例如:atlassian.com/git/tutorials/rewriting-history/git-rebase
      • 你能不能看看我的新问题,这个问题与这个问题有关系stackoverflow.com/questions/58100856/…
      • 当然,添加了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2020-11-21
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多