合并两个Git存储库并保留主历史记录

Merge two Git repositories and keep the master history

我需要将两个Git存储库合并到一个全新的第三个存储库中。我按照下面的说明操作,但结果不是我所期望的。合并两个Git存储库而不破坏文件历史记录

看看这个:

Git Merge operation

主人没有联合。

  • 是否可以将所有内容合并到同一个主控形状上?
  • 我想有一个清白的主人的历史。

您可以在Github上自由使用我的示例存储库:

  • 网址:https://github.com/dimitridewaele/repoa
  • https://github.com/dimitridewaele/repob

这是我的合并结果。

  • 网址:https://github.com/dimitridewaele/repo

这就是我想要的情况:(画画解决方案!!!!)

Painted solution!!

我如何面对目前的情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init

# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
dir > Read.md
git add .
git commit -m"initial commit"

# Add a remote for and fetch the old RepoA
git remote add -f RepoA https://github.com/DimitriDewaele/RepoA

# Merge the files from RepoA/master into new/master
git merge RepoA/master --allow-unrelated-histories

# Do the same thing for RepoB
git remote add -f RepoB https://github.com/DimitriDewaele/RepoB

# Merge the files from RepoB/master into new/master
git merge RepoB/master --allow-unrelated-histories

感谢您的帮助!

更新:答案

正确的答案是重新设置基码,而不是合并。

  • https://github.com/dimitridewaele/repomerged

代码:

1
2
3
4
5
# Rebase the working branch (master) on top of repoB
git rebase RepoB/master

# Rebase teh working branch (master with RepoB) on top op repoA
git rebase RepoA/master

还有一个问题。第二个回购将丢失父视图。我发布了一个后续问题:合并两个Git回购并保留历史记录

enter image description here


这很容易,而不是合并使用REBASE。假设您想先使用repoA/master(在获取和添加远程之后)

1
2
3
# starting on master
git rebase RepoB/master # place master on top of masterB
git rebase RepoA/master # place master (with masterB) on top of masterA

请注意,钢筋具有潜在的破坏性,一开始有点不具说服力,因此我强烈建议首先阅读它们(因此,上面链接中的文档是一个很好的开始位置)。