简而言之,我有两个git存储库,一个存储库是另一个存储库,该存储库的历史是 改写。我需要将叉子合并回去,但这似乎很棘手。
作为示例,假设我有一个名为foo
的存储库。提交历史记录如下所示:
Commit 3: Typo fixes
Commit 2: Some feature
Commit 1: Quick bug fixes
Commit 0: Initial commit
然后将 foo
分叉为bar
,然后使用一个过程来重写/删除历史记录,以便bar
的历史记录
如下所示:
Commit C: Type fixes
Commit B: Some feature
Commit A: Quick bug fixes
这时,提交ID已更改,并且派生中不再存在Commit 0。其他都一样。
现在,时间已经过去了。这两个存储库都有很多人对它们进行过工作。因此,我们可能会有类似的内容:
foo bar
----------------------------------|-------------------------------------
Commit 5: Fix the major bug fix |
Commit 4: Major bug fix | Commit D: Project specific fixes
Commit 3: Typo fixes | Commit C: Type fixes
Commit 2: Some feature | Commit B: Some feature
Commit 1: Quick bug fixes | Commit A: Quick bug fixes
Commit 0: Initial commit |
有什么方法可以将bar
合并回foo
?从技术上讲1 == A
,2 == B
和3 == C
,但我是
不确定如何对帐。
答案 0 :(得分:1)
有一个存储库,将这两个存储库作为远程存储库,同时取回两个存储库,然后检出一个分支,然后从另一个分支中挑选您需要的东西。然后,您可以将其推送到该分支所属的远程服务器。另一个仓库中的分支也可以做到这一点。
答案 1 :(得分:0)
我找到了一种使用其他方法到达那里的解决方案。这大致就是我所发现的。
upstream
的形式添加到当前仓库中。git replace --graft
因此,从上面开始,常见的提交将是Commit 2 / Commit B,下一个提交将是CommitC。然后,您应该这样做:
git replace --graft C 2 B
git merge upstream/master