本地合并多个仓库,保留Commit历史

本地合并多个仓库

当我用git管理我本地仓库A的开发内容的时候,想将某个小组件B也引入我的仓库。但我不想直接复制代码,而是想将小组件B的git 历史也导入到A。那么这篇文章可以给你一定的启发。

1. 准备仓库

假设你有两个本地仓库:

  • repoA(你要合并到的仓库)
  • repoB(你要合并的仓库)

2. 在 repoA 中添加 repoB 作为远程仓库

导航到 repoA,并使用 repoB 的本地文件路径添加它:

(如果是win中使用git进行,最好是使用相对路径)

bash 复制代码
cd /path/to/repoA
git remote add repoB /path/to/repoB

3. 从 repoB 获取历史记录

获取 repoB 的提交和分支:

bash 复制代码
git fetch repoB

4. 将 repoB 合并到 repoA

repoB 的历史记录合并到 repoA。例如,如果 repoB 的默认分支是 main

bash 复制代码
git merge repoB/main --allow-unrelated-histories

--allow-unrelated-histories 标志是必需的,因为这两个仓库最初有无关的历史记录。

5. 解决冲突(如果有)

如果有冲突,请手动解决。使用 git status 识别冲突,编辑文件,然后暂存并提交更改:

bash 复制代码
git add <conflicted-files>
git commit

6. 清理

如果不再需要 repoB 的远程仓库,可以移除它:

bash 复制代码
git remote remove repoB

示例

假设:

repoA 位于 /Users/username/projects/repoA

repoB 位于 /Users/username/projects/repoB

以下是合并它们的步骤:

bash 复制代码
cd /Users/username/projects/repoA
git remote add repoB /Users/username/projects/repoB
git fetch repoB
git merge repoB/main --allow-unrelated-histories

关键注意事项

• 备份:在合并之前,始终备份你的仓库(可以将两个仓库都进用压缩包打一个包,确认合并良好后,再删除这个备份)。

• 无关历史记录:如果仓库有无关的历史记录,请使用 --allow-unrelated-histories

• 测试:验证合并后的仓库,确保一切正常工作。

这种方法完全在本地操作,不需要远程服务器。

参考文献

以下网页、视频、工具,在不同程度帮助我学习了本文章的内容,在此对提供帮助的技术前辈表示感谢~

  1. AIGC声明: DeepSeek-V3 腾讯元宝网页版本;
相关推荐
闲云一鹤12 小时前
Git LFS 扫盲教程 - 你不会还在用 Git 管理大文件吧?
前端·git·前端工程化
砖厂小工15 小时前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
程序员鱼皮16 小时前
又一个新项目完结,我要出海了!
ai·github·开源项目
徐小夕16 小时前
pxcharts-vue:一款专为 Vue3 打造的开源多维表格解决方案
前端·vue.js·github
Moment17 小时前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
我叫黑大帅17 小时前
前端如何利用 GitHub Actions 自动构建并发布到 GitHub Pages?
前端·面试·github
HelloGitHub19 小时前
这个年轻的开源项目,想让每个人都能拥有自己的专业级 AI 智能体
开源·github·agent
刘发财1 天前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
sunny8651 天前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github