【问题标题】:Automatically manage a git branch that depends on another local branch?自动管理依赖于另一个本地分支的 git 分支?
【发布时间】:2014-01-16 20:38:51
【问题描述】:

假设我正在处理两个本地 git 分支。

分支 1 是从“master”分支出来的,分支 2 是从分支 1 分支出来的(并且依赖于它)。

两者都在进行中,我还没有准备好推动它们中的任何一个。

在处理分支 2 时,我看到了我想要进行的更改,因此我切换回分支 1 并对其进行了一些重构,添加了一个新的提交。

现在我想回到分支 2 并重新设置它。

如果我运行 git rebase branch_1 branch_2,我会遇到大量冲突,因为 branch_2 的历史记录当前包括重构之前的旧分支_1 提交,以及分支_1 中的新重构冲突。

让我们暂时假设不存在实际冲突。如果我要创建一个新的分支 2b,并按顺序挑选分支 2 独有的所有提交,它们会干净地修补。

是否有一种简单的方法可以将分支_2 独有的所有提交重新定位到新的分支_1 上?

【问题讨论】:

  • 注意:在简单的情况下,git rebase branch_1 branch_2 可以工作 - 所以假设我修改了提交或对 branch_1 进行了交互式变基,这保证会有冲突。
  • 您的变基尝试变基git log branch_1..branch_2 列出的所有提交。那些是你试图挑选的相同的提交吗? (也许您应该添加一个小的提交图以使您的情况更加清晰。)

标签: git version-control rebase


【解决方案1】:

您在 branch2 上的提交基于未重构的提交,然后更改了未重构的代码。现在您尝试在重构提交时重新设置这些更改的基础,但您的更改仍会尝试更改不再包含在重构代码中的未重构代码行。 - 抱歉,这种变基是不可能的。


让我们看看我是否做对了。这是你的起始情况:

  master     branch_1     branch_2
    ↓           ↓           ↓
o---o---o---o---x---a---b---c

你添加你的重构:

              branch_1
                  ↓           
  master          r       branch_2
    ↓            /          ↓
o---o---o---o---x---a---b---c

现在你的变基应该这样做:

              branch_1    branch_2
                  ↓           ↓
  master          r---a---b---c
    ↓            / 
o---o---o---o---x

但是提交 a 正在更改 x 中不再包含在 r 中的行。因此,rebase 应该无法在没有冲突的情况下工作。

即使您创建一个新分支 r 并尝试挑选 a 您也应该遇到完全相同的问题。 - 如果我完全理解错误,请澄清您的问题。

【讨论】:

  • 不,你误会了。我特别说过,如果您挑选出属于 branch_2 的提交,它们会在重构代码之上干净利落地打补丁。此外,看起来“git rebase --onto”完全符合我的要求,我只是还没有想出如何将它变成单线。
  • git rebase branch_1 branch_2 应该与git rebase --onto branch_1 branch_1 branch_2 完全相同。 branch_1 branch_2 指定要移动的提交。 --onto branch_1 指定将它们移动到的位置。但上述情况仍然存在。
  • 这是我的错,我问了一个糟糕的问题。我在这里尝试了一个更好的问题:stackoverflow.com/questions/20834648/…
【解决方案2】:

好的,如果我知道 branch_2 与 branch_1 分歧时有 3 次提交,我可以这样做:

git rebase --onto branch_1 branch_2^^^ branch_2

这样合理吗?有没有一种速记方法可以指定 branch_2 的分歧点?我试过branch_2@{u},但没用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2017-12-15
    • 1970-01-01
    • 2019-03-08
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多