【问题标题】:Git - applying commits from one branch onto the other using rebaseGit - 使用 rebase 将提交从一个分支应用到另一个分支
【发布时间】:2018-12-18 07:49:37
【问题描述】:

对于我们的一个项目,我们必须使用外部公司的代码库。他们偶尔会更新他们的 master,然后我们必须将其集成到我们的 repo 中。然而,因为他们做了一些奇怪/不必要的事情,我们有几个提交,我们需要在每次他们更新他们的主人时应用,然后我们将它合并到我们的。这些提交是发布分支的一部分(我们称之为release/old。要获取最新的更改并应用这些提交,我要做的是从它们的主分支(例如release/new)创建一个新分支,然后重新设置从 release/old 提交到 release/new。

我首先从新分支尝试了git rebase release/old,但这显然不起作用,因为它将来自release/new 的提交应用到release/old。当我从 release/old branch 尝试 git rebase -i release/new 时(所以从旧的提交并将它们应用到新的)它经历了所有的提交,但是当我回到新的分支并尝试推送它时,它什么也没说可以推送,在git log 中只显示来自 master 的提交。

我只知道之前使用git rebase 完成了它,但我不知道正确的命令是什么。

【问题讨论】:

  • 使用git rebase --onto;见this docs entry
  • 所以their master + couple of commits applied from your side = release/old?和“来自他们的主人的新分支(例如发布/新)”意味着their masterrelease new 相同?
  • 正确,目前release/new 与他们的主人相同,必须发生的是来自release/old 的提交将应用于release/new(显然只有我们的,大约有8个提交总共)。有时间我会试试git rebase --onto,谢谢你的建议。
  • 如果release/newtheir master 相同(即没有添加您这边的额外提交)并且release/old 是基于他们的their master + a couple of commits applied from your side 那么你不需要rebase一点也不。您可以创建release/old 的副本并将其命名为release/new
  • 应该澄清一下,主控release/new 所基于的比release/old 所基于的要新,所以release/new 有变化release/old 没有。我认为仅仅复制release/old 是不够的。

标签: git rebase


【解决方案1】:

假设这是你的情况:

a -- b -- c                 <-- their/master
     \ 
      \
       f -- g               <-- release/old
  1. git checkout release/old
  2. 通过git checkout -b release/new创建此分支的副本
  3. 通过git rebase their/masterrelease/new 分支更新为最新的their/master,结果:
a -- b -- c                 <-- their/master
      \    \ 
       \    \
        \    f' -- g'        <-- release/new
         \
          f -- g             <-- release/old

您的release/new 现在有their/master 作为基础,此外,它还有包含在此基础之上的release/old 中的“提交对”的副本。

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2016-06-04
    • 2017-02-21
    • 2013-06-08
    • 2018-06-22
    • 2016-03-23
    • 2011-05-06
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多