如何将以前的git repo的历史“添加”到新的git repo中?

w46czmvw  于 5个月前  发布在  Git
关注(0)|答案(1)|浏览(77)

所以,我在GitHub帐户上有这个repo,并且还存储在PC上的本地。在某个时候,我删除了帐户并创建了一个新帐户。我在新帐户上创建了一个空白repo,从旧repo中挑选本地文件(减去.git文件夹)并将它们放在新的repo中并发布它。从那时起,我继续开发新的acc,进行提交等。现在,考虑到我仍然拥有旧帐户中的repo的原始本地文件,有没有一种方法可以“重写”新repo的git历史记录,以添加旧repo的提交(可能还添加了最终的分支,拉取请求等)?我猜这是用git rebase做的事情,但我不知 prop 体该怎么做。
我在网上搜索了一下,找到了一些相关的东西,但不是专门针对这个场景的,我担心我会做得一团糟。什么是正确的方法?

更新:

假设我有一个github repo,包含 main 分支上的 OLD repo。
我通过以下步骤成功地将旧的和新的repo放在一起:
1.向 OLD repo添加一个分支,称为“old-repo-new-分支”;
1.在新创建的分支中,推送 NEW repo;
1.运行此命令git rebase --onto IdOfLastCommitInMainBranch IdOfFirstCommitInNewBranch old-repo-new-branch(将IdOfLastCommitInMainBranch和IdOfFirstCommitInNewBranch与相对id交换);
1.它重定了基础,并把2个仓库放在了旧仓库新分支中,以及它们的提交历史,但是当与远程同步(pull & push)时,我得到了这个新错误:fatal: refusing to merge unrelated histories;
1.我在谷歌上搜索了一下,通过做git pull origin old-repo-new-branch --allow-unrelated-histories然后推来解决;
现在的问题是,在2个历史(旧的和新的)的“中间”的提交看起来没有父提交(它应该有倒数第二个 OLD repo提交作为父提交)。事实上,当我在github.com或GitHub Desktop上查找它的差异时,它在repo中的所有文件都有一个绿色“+"。相反,它应该显示相对于前一个提交的修改。

最终更新和解决方案:

我做得很糟糕,因为我在rebase,而repo已经推送到github了。我遵循@etfshift0 answer并使用:git rebase --onto id-of-last-commit-to-keep-from-old-repo id-of-first-commit-in-new-repo branch-of-new-repo,而newRepo分支只在本地,然后发布它。解决了!

ccrfmcuu

ccrfmcuu1#

如果newrepo的第一次提交的树与 old repo的给定提交的树完全相同,那么这可以很容易地完成。如果您可以从旧repo中获得与新repo的第一次提交的树完全相同的提交,那么您可以使用我为此目的开发的脚本:https://github.com/eantoranz/git-replay
你可以在一个可以 * 看到 * 旧的和新的历史记录的仓库中使用它(如果你不知道如何做到这一点,这是一个单独的问题)。
如果树不是 * 相同的 *,那么你需要从旧的repo中找到一个提交,它的树与新repo的第一个提交中的树最相似.让我们将旧repo中的提交称为X。然后你可以这样做:

git rebase --onto X id-of-first-commit-in-new-repo the-branch-of-the-new-repo

字符串
这将把新仓库中第一次提交之后的所有提交都放在旧分支的顶部。
我建议在新的回购分支的同一个地方创建一个临时的分支,并使用它,直到你得到你想要的结果,这样就不会搞砸真实的的分支。
假设:我假设 new repo的 first commit只是从旧repo复制文件并提交,而不添加任何更改。

相关问题