【问题标题】:How to pick all the changes of a git repo fork F1 from same parent with the other fork F2如何从同一父级中选择 git repo fork F1 的所有更改与另一个 fork F2
【发布时间】:2020-09-14 19:56:30
【问题描述】:

假设有一个 repo (L),例如 llvm。上面有成千上万的叉子。假设有人在提交 Cx 时从 repo L 分叉;让我们将分叉的 repo 称为 F1。在一段时间内,F1 中添加了一些功能,并且它仍在增长,假设它是 rev Rx。

类似地,其他人在提交 Cy 时分叉了 repo L;让我们将分叉的 repo 称为 F2。同样,这个分叉的回购也随着时间的推移而增长,并且仍在增长,假设它是在 rev Ry

现在我的问题是,我想将 Forked Repo F1 到 R1 的所有更改以及 repo F2 到 R1 的所有更改都放在我自己的来自同一个父 L 的 fork 中。

只是为了更清楚我的期望。 灰色框是父 repo L。蓝色框是具有不同提交 A1、B1...I1 的 Fork F1。同样,红色框是 Fork F2,具有不同的提交 A2、B2 ..F2。

现在绿色框是叉子,我期待叉子 F1 和 F2 的变化。从父级创建分支对我来说并不重要。只要我在 F1 和 F2 中获得所有可用的更改,我就可以接受我预期的分支。

在github中可以做这样的事情吗? 我确实尝试过樱桃采摘。但是 F1 或 F2 中的提交太多了。我不确定采摘樱桃的最佳和最简单的方法是什么。 或者我应该将前叉 F1 与 F2 或 F2 与 F1 合并?也不知道该怎么做。

提前感谢您的帮助和支持。

【问题讨论】:

    标签: git github fork git-merge git-cherry-pick


    【解决方案1】:

    如果我对您的理解正确,您可以在知道您感兴趣的分叉(和分支)后通过简单的合并/变基来执行此操作。Git 将负责处理您和您的分叉之间的差异。你可以说这是一个“反向拉取请求”。

    假设我有三个存储库。一个底座和两个叉子。制作叉子后,基础有所进步。当然,我需要知道我对哪些分叉感兴趣。

    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git remote add fork1 ../fork_test_1
    
    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git remote add fork2 ../fork_test_2
    
    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git remote -v
    fork1   ../fork_test_1 (fetch)
    fork1   ../fork_test_1 (push)
    fork2   ../fork_test_2 (fetch)
    fork2   ../fork_test_2 (push)
    
    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git fetch fork1
    remote: Enumerating objects: 8, done.
    remote: Counting objects: 100% (8/8), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 6 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (6/6), done.
    From ../fork_test_1
     * [new branch]      master     -> fork1/master
    (same for fork2)
    
    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git ls master..fork1/master
    ac45d82 (fork1/master) change 2 from fork 1 [Martin Kjeldsen]
    ee9d670 change 1 from fork 1 [Martin Kjeldsen]
    
    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git ls master..fork2/master
    f00ba61 (fork2/master) change 2 from fork 2 [Martin Kjeldsen]
    2936886 change 1 from fork 2 [Martin Kjeldsen]
    

    现在我将合并我感兴趣的分支中的分支并解决冲突。

    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git merge fork1/master
    Auto-merging test
    CONFLICT (content): Merge conflict in test
    (same for fork2)
    

    现在我得到了两者的变化。

    zrrbite@ZRRBITE MINGW64 /d/dev/git/fork_test (master)
    $ git ls -10
    06c4ded (HEAD -> master) merged changes from fork 2 [Martin Kjeldsen]
    6da96f1 merged changes from fork [Martin Kjeldsen]
    f00ba61 (fork2/master) change 2 from fork 2 [Martin Kjeldsen]
    2936886 change 1 from fork 2 [Martin Kjeldsen]
    ac45d82 (fork1/master) change 2 from fork 1 [Martin Kjeldsen]
    ee9d670 change 1 from fork 1 [Martin Kjeldsen]
    cb8c9d3 change 2 from base repo [Martin Kjeldsen]
    44074f6 change 1 from base repo [Martin Kjeldsen]
    8c5151e added test [Martin Kjeldsen]
    

    【讨论】:

    • 感谢您的回复。我无法按照一些说明进行操作。需要更多的输入。这是我从 LLVM 项目中派生的命令。我克隆了我创建的 llvm fork。之后,我按照建议运行以下命令。 git remote add apple/llvm-project github.com/apple/llvm-project.git git remote add espressif/llvm-project github.com/espressif/llvm-project.git git fetch apple/llvm-project git fetch espressif/llvm-project git merge apple/llvm-project merge: apple/llvm-project - 不是我们可以合并的东西
    • “不是我们可以合并的东西”通常是由拼写错误或缺少分支/引用引起的。看起来您只指定了远程,而不是要合并的分支:git merge apple/llvm-project。因此,您还需要找出您感兴趣的分支中的哪个分支。例如,这通常通过 github 中的“拉取请求”来处理。例如。 fork1/mybranch -> origin/master。在这里,您自己猜测拉取请求应该是什么:)
    • 感谢您的快速回复。为我之前评论中的缩进内容道歉。是的,您的分支名称是正确的。现在我有很多合并冲突,我需要在继续之前解决这些冲突。希望在接下来的几天内解决这些冲突后,我会发布一条消息:)
    • 是的。在我输入的实际命令中,它就在那里。由于某种原因,它没有出现在这些 cmets 中。
    • 如果你使用了“git clone ”,那么origin就是。如果 master 是您要更新的分支,那么是git push origin master。如果你已经合并,那么你可以像往常一样推送,如果你使用 rebase,你需要git push --force-with-lease。使用git remote -v 查看您配置了哪些引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多