【发布时间】: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