【问题标题】:How to merge a repository copy如何合并存储库副本
【发布时间】:2017-10-29 11:13:32
【问题描述】:

在项目开始时,我们启动了 REPO-A。该回购持续了几个月,直到其中一位工程师决定分叉该项目。现在他通过复制目录并开始一个新的 repo 来做到这一点。回购-B。现在B没有A的历史,A也没有进一步的发展。现在我们想回到 A 并将 B 中的所有内容合并回 A,并保留 B 的所有历史记录,而它是一个单独的 repo。这里唯一的可取之处是,由于 B 一开始是 A 的副本,我应该能够将 B 的历史移植到 A 的末尾,并且一切都应该没问题。

不幸的是,我花了很长时间尝试这样做。

我在 (REPO-A) 中尝试过:

git add remote new REPO-B
git checkout -b mergeAttempt
git merge -X theirs --allow-unrelated-histories new/master

现在这似乎有点作用,现在只有 REPO-B 的历史记录会覆盖已修改文件上从 REPO-A 存在的任何历史记录,因此没有真正的历史记录。所以我尝试了:

git cherry-pick -X theirs <REPO-B first commit>..<REPO-B last commit>

这也失败了,因为 REPO-B 在其中创建的分支和 master 之间有几个合并。我还尝试在 REPO-B 中创建一个分支,将 repo 的根重新设置为 REPO-A 中的最后一次提交,结果很有趣。

所以我不知道从这里去哪里。

【问题讨论】:

  • 不确定 git 工具是否可以轻松地允许您执行此操作,但您应该克隆 A,然后将 B 作为远程添加到克隆中,将 B 获取到克隆中,然后重新设置所有来自 B 的提交在来自 A 的提交之上。如果这可行,您将拥有从 A 到 B 的 1 个历史记录。
  • he did this by just duplicating the directory:他复制了整个 repo 文件夹吗? cp -r project-A/ project-B/ 之类的东西?
  • 看起来是这样,但他重新提交了它,所以来自 REPO-A 的原始 .git 文件夹丢失了。 REPO-B 认为这是一个新的 repo。

标签: git merge rebase cherry-pick


【解决方案1】:

将 REPO-A 合并到 REPO-B 的步骤:

cd path/to/REPO-B

git remote add REPO-A path/to/REPO-A

get fetch REPO-A

git merge --allow-unrelated-histories REPO-A/master 

git remote remove REPO-A

来源:git merge different repositories?

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2011-03-17
    相关资源
    最近更新 更多