【问题标题】:How to keep your git fork clean from duplicate commits?如何让你的 git fork 免受重复提交的影响?
【发布时间】:2011-06-27 01:44:11
【问题描述】:

在使用 git 维护分叉时,我经常遇到重复提交的问题。

假设我已经分叉了一个存储库并提交了修复。我将更改推送到我的分叉存储库,并且可以在 github 上看到更改。到目前为止一切顺利。

问题出在项目维护者将我的修复合并到他们的分支中并且我稍后更新以与主项目保持同步时。我的修复会在我的历史记录中出现两次,一次是原始的,一次是被项目维护者合并的时间。

有解决办法吗?很高兴终于清理了我的树。

【问题讨论】:

    标签: git github fork commit


    【解决方案1】:

    那些提交是精心挑选的,而不是合并的?如果您将相同的提交合并到两个分支中,然后将其中一个合并到另一个分支中,则提交不会出现两次。您将在历史记录中看到您所期望的确切内容 - 以给定提交作为父提交的两个合并提交,然后这两个分支最终合并:

    - o - o - o - o - o - o - o 
       \   \         /       /
        \   o - o - o       /
         \           \     /
          o - o - o - o - o
    

    这是合并而不是挑选樱桃的一个非常好的理由 - 为了促进合并,重要的是确保从可能想要合并它们的所有分支的共同祖先开始您的主题分支,以便那些功能/错误修复可以干净地合并,无需拾取任何其他内容。

    操作说明:提交是从 Github 的 fork 队列中应用的,该队列在幕后使用了 cherry-pick。已接受,谢谢。

    【讨论】:

    • 合并的问题是你得到了分支中的所有提交(或者至少所有提交到所需的提交),而不仅仅是这个提交的变更集。
    • @Paŭlo:这就是为什么我写下关于从适当位置开始主题分支的说明。如果您没有这种远见,这只是一个问题。
    • 我在读这个:blog.woobling.org/2009/05/githubs-fork-queue.html,显然你可以使用“git rebase origin/branch”或使用“git pull --rebase”来解决问题。
    • @像素开发者:嗯,这取决于历史有多复杂。一般来说,是的,你可以将你的主题分支重新定位到它们应该首先开始的位置......但是一旦它们在任何地方合并,你就有麻烦了。
    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2011-05-04
    • 2011-01-02
    • 2016-08-10
    • 2017-06-12
    相关资源
    最近更新 更多