【发布时间】:2019-04-12 14:06:48
【问题描述】:
我有一个很久以前就开始的项目,并做出了许多承诺。然后该项目被放弃了大约两年,在此期间我忘记了我一直在项目上使用 git 版本控制。我拿起它,将所有文件复制到一台新机器上,并启动了一个新的 git 存储库,其中包含大约 100,000 行代码和数十个文件,现在它拥有自己的冗长提交历史。我最近重新发现了旧的 repo,并尝试将两个 repo 的提交历史合并在一起,using the instructions here.
但是,结果不完整。如果我查看 github 上的提交历史记录,来自旧存储库和新存储库的提交是完整的,但是每个单独的文件历史记录不会延伸回旧存储库的一系列提交,仍然显示它们只是在创建时提交期间创建的的新存储库。当我手动复制所有内容以启动新 repo 时,一些未传输的文件根本不显示。
自旧存储库历史结束以来,项目的文件结构和命名约定发生了显着变化,并且某些文件关联可能并不明显。如果我必须手动将旧的与新的链接一次,我可以这样做,但自动解决方案会更好。
【问题讨论】:
-
但每个单独的文件历史不会延伸回旧存储库的一系列提交,嗯,这是因为您确实 将所有文件复制到了新机器,并开始了一个新的 git repo,很可能 git 将它们视为两个不同的文件.. 那时,我已经放弃并将旧的 repo 用作博物馆..
-
在旧仓库的最后一次提交和新仓库的第一次提交之间你改变了多少?
-
请注意,无论您如何操作,您想要执行的操作都会更改所有新 repo 的哈希值;把所有东西结合起来可能不值得。
-
在最后一次旧的/第一次新的提交之间几乎没有什么变化——我提到的结构性改革是最近的,是什么促使我去寻找更旧的历史,但第一个文件新的提交应该与旧的文件相当相似。
-
如果新仓库的历史是线性的(没有合并),你可以使用
git rebase。否则最好使用git filter-branch来保留合并。我对任何一个都没有足够的信心给出一个肯定的答案(尤其不是filter-branch);在尝试任何事情之前,我都会备份两个存储库。
标签: git github merge git-merge