如何从同一个父级与另一个F2拾取git repo fork F1的所有更改

问题描述

说有一个仓库(L),例如llvm。上面有成千上万的叉子。假设某人在提交Cx时从存储库L分叉;我们将其称为分叉存储库F1。在一段时间内,功能添加到F1中,并且仍在不断增长,可以说是Rx版本。

类似地,其他人在提交Cy时分叉了回购协议L;让我们将其称为分叉存储库F2。同样,此分叉的回购也随着时间的推移而增长,并且仍在增长,我们可以说它处于rev Ry

现在我的问题是,我希望在同一个父L的自己的分叉中拥有到R1为止的所有Forked Repo F1的更改和直到R1的所有Repo F2的更改。

enter image description here

请更加明确我的期望。 灰色框是父仓库L。蓝色框是具有不同提交A1,B1 ... I1的Fork F1。同样,红色框是具有不同提交A2,B2..F2的Fork F2。

现在,绿色框是Fork,随着叉F1和F2的变化,我期望。对我来说,从父级创建派生关系无关紧要。只要我能获得F1和F2中的所有更改,就可以接受我的期望。

是否可以在github中进行此类操作? 我确实尝试挑樱桃。但是在F1或F2中有太多的提交。我不确定摘樱桃的最佳和最简便方法是什么。 还是应该将叉子F1与F2合并或将F2与F1合并?也不知道该怎么做。

在此先感谢您的帮助和支持

解决方法

如果我对您的理解正确,则只要知道您感兴趣的分叉(和分支),就可以使用简单的合并/重新设置操作。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]