【问题标题】:GIT: How to merge split commit into different branchGIT:如何将拆分提交合并到不同的分支
【发布时间】:2014-08-03 14:54:07
【问题描述】:

我已按照建议的in this question 使用git rebase -i deadbeef~1 成功拆分先前的提交deadbeef。我在我的development 分支上做了这个。

据我所知,一切都很好,deadbeef 已从 development 的历史中消失,并已被我在变基时所做的提交所取代。

现在出现两个问题:

  1. 我有几个分支在他们的历史中有deadbeef - 我如何将变基“合并”到这些分支中?如果我在这些分支中的任何一个中执行 git merge development 会发生什么?
  2. deadbeef 也已被推送到远程存储库,并出现在其他一些克隆上。为了确保deadbeef真的从所有历史中消失,我将不得不push --force并在所有其他开发机器上做一个新的clone,对吧? (幸运的是,这相当容易,我可以访问所有其他克隆)。

谢谢!

【问题讨论】:

    标签: git version-control merge rebase


    【解决方案1】:

    1) 你也必须重新设置其他分支。很有可能

    git checkout other-branch
    git rebase development
    

    会成功的。

    更新:正如我们在 cmets 中制定的,您可以这样做

    git rebase -i development
    

    并从提交列表中删除 deadbeef 以进行变基。之后,其余的提交将干净地应用。

    1b) 还有另一种替代方法,更手动。拿一个你想编辑的带有死牛肉的分支,说它是foobar。创建一个新的tmp 分支,从死牛之前的提交开始。然后挑选你将 deadbeef 分成(来自开发)的提交。然后从 deadbeef(不包括)到分支末尾(来自foobar)中挑选所有提交。检查tmp 是否正确并将其重命名为foobar

    2) 是的,您必须push -f 并在其他开发机器上重新创建或重置分支。您可能只需要(在其他机器上)做

    git fetch
    git checkout development
    git reset --hard origin/development
    

    【讨论】:

    • 不幸的是,git rebase development 并没有解决问题,它会打印出First, rewinding head to replay your work on top of it... Applying: - <commit message of deadbeef>,并会出现大量合并冲突的错误。我猜这是因为它注意到 development 中缺少 deadbeef,对吧?
    • 看看那些合并冲突——实际上它们应该不会太难修复。修复它们,git add <fixed-files>... 并说git rebase --continue
    • 好的,我已经描述了另一种方法,请查看答案的更新文本。
    • 实际上,合并冲突很容易解决,但我发现了一种更好的方法(因为它们很多,deadbeef 是一个巨大的提交):我运行了git rebase -i development 并删除了@ 987654338@ 来自缓冲区。所有其他提交(正是那些在 other-branch 中的提交,但不是在开发中)重新调整基础很好。
    • 太棒了!我会记住这个想法的。但是,如果您的拆分提交在文本上等同于 deadbeef,那么 rebase 魔法应该可以自行发挥作用。但是,是的,一开始就不让它发挥作用可能更简单。
    猜你喜欢
    • 2014-07-17
    • 2017-03-05
    • 2011-04-21
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多