如何将Repo A重新纳入Git版本控制并保留Repo B的提交历史?
解决方案:恢复Repo A的版本控制并保留Repo B的提交历史
根据你的场景,我们可以通过几个简单的步骤,让Repo A重新接入Git版本控制,同时完整保留Repo B里的提交历史(1---2),并把你后来在Repo A中做的变更(3)作为新提交追加到历史末尾:
步骤1:在Repo A中初始化Git仓库
首先进入你的Repo A目录,初始化一个新的Git仓库:
cd /path/to/your/repoA git init
步骤2:关联Repo B作为远程仓库
因为Repo B保存着完整的历史提交,我们把它作为远程仓库添加到Repo A中(这里假设Repo B是本地仓库,如果是远程仓库的话,把路径换成对应的Git URL即可):
git remote add repoB /path/to/your/repoB
步骤3:拉取Repo B的完整提交历史
拉取Repo B的主分支历史(假设主分支名为*main*,如果是旧版本的Git可能是*master*,根据你的实际情况替换):
git pull repoB main --allow-unrelated-histories
这里加上
--allow-unrelated-histories是因为Git默认会拒绝拉取没有共同祖先的仓库历史,但我们明确知道Repo B是Repo A的原始克隆,所以这个参数可以跳过这个检查。
拉取完成后,Repo A就拥有了Repo B里的所有提交历史(1---2)。
步骤4:提交Repo A的最新变更
现在Repo A的工作区是你脱离版本控制后修改的内容,我们把这些变更提交为新的历史节点:
- 查看当前变更状态,确认所有修改都被识别:
git status
- 追踪所有变更文件:
git add .
- 提交变更,建议写清楚提交信息方便后续追溯:
git commit -m "Apply changes made after repo A lost version control"
验证结果
提交完成后,你可以用git log查看完整的提交历史,应该会看到类似这样的结构:
commit <hash-of-commit-3> (HEAD -> main) Author: Your Name <your-email@example.com> Date: [当前时间] Apply changes made after repo A lost version control commit <hash-of-commit-2> Author: Your Name <your-email@example.com> Date: [提交2的时间] [原来的提交2信息] commit <hash-of-commit-1> Author: Your Name <your-email@example.com> Date: [提交1的时间] [原来的提交1信息]
这样就完成了目标:Repo A重新纳入版本控制,且完整保留了Repo B的历史,同时把后续的变更作为新提交加入。如果之后你想让Repo B同步Repo A的最新状态,只需要在Repo B中添加Repo A作为远程,然后拉取即可。
内容的提问来源于stack exchange,提问作者TryHarder
相关产品推荐
相关产品推荐

