git - 将较新的 Git 存储库附加到较旧的存储库以 merge 两个历史记录

标签 git

我在 GitHub 上有两个相关的 git 存储库,它们实际上应该是一个。如何以满足以下上下文的方式将两个项目 merge 为一个项目:

  • 每个 repo 目前只有一个 master 分支。
  • A 是较旧的 repo,B 是较新的 repo。
  • A 是规范 repo (即: repo A 具有我最终希望调用此工具的名称,因此我希望所有 future 的工作,在 B 附加到 A 之后,在 repo A 中完成)。
  • B追加到A后,A应该存在,B应该被删除。
  • 我不想将一个存储库作为另一个存储库的子目录,我想将两个存储库 merge 为一个存储库。
  • 我希望对 A 的 git 历史记录的这种更改是永久性的,这样人们就不必提取引用,而只需克隆更新的存储库 A 并按预期获得一切。
  • 两个仓库之间有3个相似的文件:.gitignorereadme.mdpackage.json

最佳答案

这是一个简洁的方法:

来自您本地的 A 存储库

git remote add b https://github.com/your-username/your-b-repo.git
git fetch b
git checkout -b b-master b/master
git rebase master
# fix conflicts if any
git checkout master
git merge b-master
git branch -d b-master

解释

  1. 将名为 b 的辅助远程存储库添加到本地主存储库
  2. 从中获取所有内容
  3. 创建一个与名为 b-master 的 b/master 匹配的新本地分支并 checkout 它
  4. 使用 rebase 命令将您在 A 存储库中所做的所有操作放在 B 存储库中
    1. 在 rebase 期间修复冲突
  5. 检查你的 master 分支(在 A 上)
  6. merge master 分支 (A) 到 b-master 分支 (B)
  7. 删除现在没用的 b-master 分支

关于git - 将较新的 Git 存储库附加到较旧的存储库以 merge 两个历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912872/

相关文章:

git - 在 Windows 上的 git Git 中忽略文件名大小写更改

git - 如何恢复 `magit` 中旧提交的更改?

git lab - 无法创建 : This merge request already exists: ["Master"]

git - 为什么 git 不给我任何冲突?

git - 将单个存储库从一台 Atlassian 存储服务器迁移到另一台服务器并维护所有数据

android - 使用 android studio 将我的项目连接到 gitlab

git - Azure DevOps - 条件/表达式允许我跳过阶段内的任务

git - 比较 Git 中 rebase 的差异

git-svn 卡在克隆上

git - 将本地 Git 仓库推送到新的远程仓库,包括所有分支和标签