gpt4 book ai didi

git - 手动复制 Repo 文件后重建 Git 历史记录

转载 作者:行者123 更新时间:2023-12-03 16:56:55 38 4
gpt4 key购买 nike

我一直在使用手动复制的存储库副本,不幸的是,它没有历史记录。现在已经找到了具有大量历史记录的旧版 repo。我从头开始创建的 repo (红色)并结合历史 repo 的历史(蓝色)的最佳选择是什么?

git

最佳答案

在您的新存储库中,将旧存储库添加为远程存储库并获取它。

git remote add old <path or url to the old repo>
git fetch old

A - B - C - D [old/master]

E - F - G - H [master]

E 是您在所有文件中复制的初始提交。

检查 D 和 E 是否与 git diff old/master E 相似.如果它们相同,或足够接近无关紧要,请重新设置 master顶部 old/master .
git rebase old/master

[old/master]
A - B - C - D - E1 - F1 - G1 - H1 [master]

E - F - G - H
E1现在将是 D 中文件之间的差异和 E .如果文件相同,则不会有 E1它会跳到 F1 .

然后您可以 git push此回 old .
git push old master

[old/master]
A - B - C - D - E1 - F1 - G1 - H1 [master]

E - F - G - H

请注意,这仅适用于 master .如果还有其他开放的分支,它们也必须重新定位到新的 master 上。 .还要确保检查是否需要移动任何标签。

现在 merge 历史记录,决定哪个存储库是规范的并销毁另一个存储库以避免历史再次发生分歧。

如果存在重叠,即如果在将文件复制到 E 后在旧 repo 中进行了更改,则可能会发生冲突。如果在复制文件后在旧的 repo 中进行了大量更改,则可能有必要根据旧的提交重新设置基准,然后将新的提交视为一个分支。

例如,假设在 B 提交到旧存储库后,文件被复制到 E。后来又加入了C和D。
A - B - C - D [old/master]

E - F - G - H [master]

你会在 B 之上 rebase 。
      C - D [old/master]
/
A - B - E1 - F1 - G1 - H1 [master]

E - F - G - H

然后处理 old/master 上的剩余提交和任何其他旧分支一样。
git merge old/master

C - D --------------- [old/master]
/ \
A - B - E1 - F1 - G1 - H1 - J [master]

E - F - G - H

关于git - 手动复制 Repo 文件后重建 Git 历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310551/

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