描述与需求
如图上,目前已有旧仓库A1,A2,且均已放到对应的目录下,仓库中分别包含用户侧和管理侧的前端代码。现需要新建一个仓库A3。
具体要求如下:
- 要求保留各个仓库迁移前的commits 记录,最好还能对命名不规范的项目进行重命名
思路与过程
- 【新增】调整现有目录结构以适应当前目录
如果不调整现有的目录结构,那么在后续合并的过程中给可能会导致文件重合。简单来说就是有问题。(给我整没话说了)
- 初始化新仓库A3
git init
# 创建自述文件、添加到A3仓库:初始化main分支
echo "">README.md
git add README.md
git commit -m 'README.md'
# 查看分支
git branch
- 将旧仓库A1,A2添加到A3的远程仓库里
# 添加远程版本库
# git remote add [shortname] [url]
git remote add A1 ./src/front_end_kids/
git remote add A2 ./src/front_end_parents/
# 显示所有远程仓库
git remote -v
- 获取远程仓库的代码
# git fetch [alias] 用于从远程获取代码
git fetch A1
git fetch A2
通过输出可以看到两个分支地址,分别是:A1/master
、A2/main
- 在A3仓库中创建辅助分支a1、a2
# git checkout 命令用于切换分支或恢复工作树文件
# git checkout -b 在新建分支的同时切换分支
# git checkout -b [local_branch] [remote_branch]
# 从远程分支中取得本地分支
git checkout -b a1 A1/master
git checkout -b a2 A2/main
4. 合并新仓库的master、a1、a2 三个分支
# 列出所有分支
git branch
# 切换到主分支
git checkout master
# 合并辅助分支
# git merge 合并分支 --allow-unrelated-histories 允许合并无关的历史提交
git merge a1 --allow-unrelated-histories
git merge a2 --allow-unrelated-histories
总结
将在新仓库作为远程库拉取到本地库的一个分支(辅助分支),然后将辅助分支和主分支合并。1
错误
直接构建新仓库
原因分析:
git add
不能添加的嵌入的git仓库
git submodule是什么
Git 工具的 submodule 功能就是建立了当前项目与子模块之间的依赖关系:子模块路径、子模块的远程仓库、子模块的版本号
直接拉取远程分支导致文件位置错乱
直接拉取的时候,会直接将a1分支的文件内容放到A1仓库的根目录,会直接导致整个仓库的目录结构混乱。这是因为在git remote add
的时候,存入分支的路径为/代码
,而git merge
的时候,是直接将辅助分支的内容放到master的根目录下。P.S. git merge
可以merge到master分支的指定位置吗?2
git checkout master # 切换需要撤销、恢复的分支
git reflog # 查看历史版本号
git reset --hard [merge前的版本号] #将本地代码回退到指定版本
Git 分支 - 分支简介
所以在开始之前,需要新增了一项准备工作。
解决办法:撤销merge3 ↩︎