【问题标题】:Rebasing a mess of inter-merged branches重新调整一堆相互合并的分支
【发布时间】:2014-10-16 05:58:58
【问题描述】:

在问过这个Creating a patch in git gives some headaches 并第一次学习如何使用 rebase 之后,我意识到我也应该将它用于其他一些事情。

我已经克隆了一个上游存储库。我已经做了一些我自己的测试和调试配置,我不打算推​​动这些配置。当上游存储库更新时,我总是将更改合并到我的“测试”分支。现在我意识到,将我的测试分支重新定位到上游/主服务器中的最新提交将使我的存储库更加干净。

我试图将我的测试分支重新设置为 master 上的最新提交,但它遇到了一些合并冲突 - 并且似乎有很多提交需要重写。如果其中许多会出现合并冲突,那将是一件令人头疼的事情

有什么办法可以只取测试分支的“状态”和主分支的“状态”,然后重写一个新的提交,也许是一个有所有差异的“testing2”分支?

【问题讨论】:

  • git checkout master; git merge --squash testing 工作吗?
  • 哇,它确实做到了!它仍然有一些合并冲突(不可避免,因为有冲突的东西),但现在它们都在一个,压缩提交,因此很容易解决!

标签: git git-rebase


【解决方案1】:

回答你的最后一段:

有什么办法可以只取测试分支的“状态”和主分支的“状态”,然后重写一个新的提交,也许是一个有所有差异的“testing2”分支?

那里,是。 git merge --squash branch 将执行合并并将所有更改放入单个提交中。但是,您将丢失所有提交信息,包括历史记录和合并信息,因此请务必了解后果。此外,单个巨大的提交很少有帮助。

如果两个分支共享一个共同的祖先,使用git rebase 应该也能正常工作。 Git 足够聪明,可以确定哪些提交已经包含在 master 中,哪些没有,并且会相应地线性化您的历史记录。

【讨论】:

  • 这次 git merge --squash 分支正是我想做的事情。谢谢。
【解决方案2】:

在没有看到提交差异的情况下,我建议挑选樱桃。从最新鲜的upstream/master 创建一个新分支,然后挑选(git cherry-pick <hash>)您在自己的分支上所做的提交。

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 2020-03-09
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2016-01-29
    • 2013-03-12
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多