gpt4 book ai didi

git - 恢复 git 存储库历史并将其添加到现有的

转载 作者:行者123 更新时间:2023-12-04 10:12:33 25 4
gpt4 key购买 nike

我现在的情况是这样的:

  • 我有一个仓库( repo1 ),原来的
  • 创建了一个新的空存储库 ( repo2 )
  • 所有内容来自 repo 1 已复制到 repo 2 , 但不是 git 历史
  • 许多更改现已提交并推送至 repo 2

  • 问题:

    我怎样才能从 恢复所有丢失的历史记录 repo 1 并将其添加到 repo 2 ?

    我基本上需要我在 中的所有代码历史记录 repo 2 .

    最佳答案

    将所有内容放入 repo2 是很容易的部分。更大的问题是对于您(或 repo2 的其他用户)来说,无缝生成的历史记录有多重要。

    从 repo2,您可以将 repo1 添加为远程并获取历史记录。

    $ cd path/to/repo2
    $ git remote add old-history path/to/repo1
    $ git fetch old-history

    在一个简化的世界里,每个 repo 只有一个 master分支,这会给你类似的东西
    O -- x -- x -- x <--(old-history/master)

    O2 -- x -- x <--(master)

    所以历史就在那里,可以查询,但你必须特意去看它。 (如果每个repo有多个分支,图就更复杂了,但基本一样。)

    假设 old-history/master具有与 O2 内容相同的提交你可以用 git replace在单个克隆中使历史看起来或多或少是无缝的。 (如果没有提交,您总是可以向 old-history/master 添加这样的提交。) git replace 有一些怪癖。 ,所以如果你想走那条路,请引用 https://git-scm.com/docs/git-replace 上的文档。

    您还可以进行历史重写以永久 merge 历史。这是一种更极端的措施,需要与共享 repo2 的任何其他用户进行一些协调。 ,但它是一种“做一次就完成”的解决方案(与 replace 形成对比,后者只影响一个本地克隆)。

    要进行历史重写,您可以使用 --parent-filtergit filter-branch (见 https://git-scm.com/docs/git-filter-branch ),或者大概你可以使用 git filter-repo (尽管我对该命令知之甚少)。进行任何类型的重写都有一些注意事项。您可以搜索 SO 以获取有关此过程的许多过去讨论,或引用 git 文档以获取有关重写共享历史记录的信息。

    关于git - 恢复 git 存储库历史并将其添加到现有的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61257755/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com