生活, 版本控制

两个独立的Git仓库的合并

本篇给出合并两个 Git 仓库并且同时保留两个 Git 仓库的历史记录的实现步骤。这里仅做个记录,如果不熟悉 Git 且没这方面需求的,可以不去折腾。

合并实现的前提是两个仓库是独立的 Git 仓库,不然可能文件冲突会比较多,无法合并,处理起来会比较麻烦。此外,需要重点注意的是,在 Git 仓库合并操作之前,最好提前将两个文件夹复制一份,做个备份,防止文件的丢失或者 .git 文件夹历史记录的丢失。

主要的实现思路是“分支合并”,这需要有远程仓库来进行配合。如果有遇到部分内容冲突无法合并,那么需要手动去解决冲突,然后再合并。Git 命令可以参考:Git常用命令GitHub和GitHub Desktop的使用在本地使用Git实现文件的版本控制

一、创建两个用于测试的 Git 仓库

  • 创建 Git 仓库 1:新建文件夹 test1,使用命令 git init,生成 .git 子文件夹。
  • 创建 Git 仓库 2:新建文件夹 test2,使用命令 git init,生成 .git 子文件夹。
  • 在文件夹中 test1 中新建文件 a1.txt,内容为:'content_test1_a1',保存。
  • 在文件夹中 test2 中新建文件 a2.txt,内容为:'content_test2_a2',保存。
  • 在文件夹 test1 中把内容添加到暂存区:git add . ,然后 git commit -m 'update_test1' 。查看记录:git log --oneline 。
  • 在文件夹 test2 中把内容添加到暂存区:git add . ,然后 git commit -m 'update_test2' 。查看记录:git log --oneline 。

二、这里将仓库 2 合并到仓库 1

  • 首先把仓库 2 推到远程仓库,例如,在 GitHub 或服务器创建远程仓库后,在本地 test2 文件夹中:git remote add origin https://gitea.guanjihuan.com/guanjihuan/test2.git ,然后 git push -u origin master
  • 进入 test1 文件夹,把仓库 2 的远程仓库作为本地仓库 1 的远程仓库:git remote add origin https://gitea.guanjihuan.com/guanjihuan/test2.git 。
  • 在 git fetch 获取内容后,查看远程仓库的分支:git branch -r 。将远程仓库的内容放在新分支上:git switch -c branch-from-test2 origin/master。查看本地的分支情况:git branch 。
  • 回到主分支:git switch master,切换到主分支后,仓库 1 文件夹会显示为原本的 test1 文件夹的内容。这时候合并分支:git merge branch-from-test2 --allow-unrelated-histories 。查看文件夹的内容,以及 git log --oneline 查看历史记录。
  • 删除临时创建的新分支:git branch -d branch-from-test2 ,同时,删除关联的远程仓库:git remote remove origin 。最后删除 GitHub 或服务器的远程仓库。

参考资料:

[1] git:合并两个不同仓库的代码

[2] Git 将两个独立的、无关的 Git 仓库合并成一个具有单一历史时间线的方法

14 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code