将git repo合并到另一个repo的分支中


120

给定回购Foo和回购Bar。我想将Bar与Foo合并,只能合并到一个名为的单独分支中baz

git checkout -b baz <=将Bar回购放在这里。

Answers:


228

您无法将存储库合并到分支中。您可以合并一个分支,从另外一个仓库到一个分支在本地资源库。假设您有两个存储库,foo并且bar都位于当前目录中:

$ ls
foo bar

更改到foo存储库:

$ cd foo

bar存储库添加为远程数据库并获取它:

$ git remote add bar ../bar
$ git remote update

根据您当前所在的分支bazfoo存储库中创建一个新分支:

$ git checkout -b baz

将分支somebranchbar存储库合并到当前分支:

$ git merge --allow-unrelated-histories bar/somebranch

--allow-unrelated-historiesgit版本2.9之前不需要)


21
从git 2.9开始,您可能需要添加--allow-unrelated-histories到git merge命令。
Drasill '17


10
我不知道我在做什么,我真的不能用foo / bar占位符来阅读它。任何人都可以使用实际的现实示例(例如适当的链接等)来编辑它吗?
rien333

哦,太好了。我希望将其合并到一个子目录中。不可能那么不同,是吗?我希望添加该步骤。
macetw

1
我遇到大量合并冲突。无论如何,您都可以强制合并到新分支中?
nomadoda '18

41

更新了“现实生活”命令:

从您的repo目录开始,确保您的工作副本是干净的(没有更改,添加或删除文件)。


新建一个分支:

git checkout -b <my-branch>

添加辅助遥控器,然后获取它:

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

合并他们在当前分支中的一个分支:

git merge <repo-name>/<their-branch>


如果您不知道<their-branch>想要哪个,那就去master

如果确定要接受所有远程更改并避免冲突(覆盖您的更改),则可以在最后一步中将其指定-X theirs为选项git merge

如果要将其添加到子目录中,则可能应该使用git子模块


3

使用幼虫的指南,我能够使用SourceTree做到这一点。

  1. 在目标存储库中创建了一个分支
  2. 通过单击“设置”按钮并添加源存储库,将源存储库添加为远程存储库。
  3. 现在,两个存储库中的分支都显示在分支列表中。我使用合并工具将分支从源存储库合并到新目标存储库的分支。
  4. 使用SourceTree或我的IDE解决了所有冲突
  5. 在我的分支中提交更改。
  6. 使用“设置”按钮从远程列表中删除源存储库。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.