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

Posted

技术标签:

【中文标题】将 git repo 合并到另一个 repo 的分支中【英文标题】:Merge git repo into branch of another repo 【发布时间】:2014-02-16 16:27:33 【问题描述】:

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

git switch -c baz

【问题讨论】:

如果你安装了自制的hub 命令,你可以使用hub merge <github-pr-url-from-the-browser-omg>。但它失败了,直到你事先做git remote add upstream <the repo url>.git。我不知道远程名称是否需要在上游。 【参考方案1】:

您不能将 repository 合并到 branch。您可以将另一个存储库中的 branch 合并到本地存储库中的 branch 中。假设您有两个存储库,foobar 都位于当前目录中:

$ ls
foo bar

更改为foo 存储库:

$ cd foo

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

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

根据您当前的分支在foo 存储库中创建一个新分支baz

$ git switch -c baz

somebranch 来自bar 存储库的分支合并到当前分支中:

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

(在 git 2.9 版本之前不需要--allow-unrelated-histories

【讨论】:

从 git 2.9 开始,您可能需要将 --allow-unrelated-histories 添加到 git merge 命令中。 @Drasill 的评论信息:github.com/git/git/blob/master/Documentation/RelNotes/… 我不知道我在做什么,我不能用 foo/bar 占位符来阅读这个。任何人都可以用现实生活中的例子(如适当的链接等)来编辑它吗? 我遇到了很多合并冲突。无论如何你可以强制合并到一个新的分支? 你拯救了我的一天!我错过了git remote update 命令。【参考方案2】:

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

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


新建一个分支:

git checkout -b <my-branch>

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

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

将他们的一个分支合并到您当前的分支中:

git merge &lt;repo-name&gt;/&lt;their-branch&gt;


如果你不知道你想要哪个&lt;their-branch&gt;,那就去master

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

如果你想将它添加到子目录中,那么你应该使用git submodules

【讨论】:

很好的答案,结合公认的答案......帮助我完成了一个大合并,与上述命令序列相对顺利。谢谢。 对“现实生活”的另一个建议:使用协助 git 合并的 IDE。例如,VS Code 的 Git Lens 可让您并排比较冲突并选择新的、旧的或两者兼而有之。大大简化了合并冲突。 :) 如果你得到 git 错误“拒绝合并不相关的历史”,那么你可以使用选项--allow-unrelated-histories(详情在这里:***.com/a/37938036/1015581)。【参考方案3】:

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

    在目标存储库中创建了一个分支 通过点击“设置”按钮并添加源存储库,将源存储库添加为远程存储库。 两个存储库中的分支现在都显示在分支列表中。我使用合并工具将一个分支从源存储库合并到我的新目标存储库的分支。 使用 SourceTree 或我的 IDE 解决了任何冲突 在我的分支中提交更改。 使用“设置”按钮从远程列表中删除源存储库。

【讨论】:

以上是关于将 git repo 合并到另一个 repo 的分支中的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件夹从 git repo 链接到另一个 repo?

markdown 将来自repo的分支合并到另一个repo中作为专用分支下的子目录

Git将包含所有子模块的repo镜像到另一个repo

sh 将一个git repos复制到另一个

将“子”git repo 合并/移动到“父”git repo

sh 将git repo的整个历史记录添加到另一个带子树的git项目中