本应在 /Project 下的 Git 根目录成了 /Project/app …
1 | . |
就是这个样子,Git 的根目录成了 /app ,而需要的是 /Project ,但是 app 又是 Project 的子目录,想迁移过去又不想丢失 Commit 数据…
简单点说就是
有 2 个 Git 仓库:repo1 和 repo2
repo1 是 repo2 的子目录
想要把 repo1 中的文件移入 repo2
repo1 的 Commit 记录要保留
当前文件结构如下
1 | . |
想要的结果是
1 | . |
开始
新建 repo1 子目录,将原 /repo1 的文件移动至 /repo1/repo1
cd repo1
mkdir repo1
find -maxdepth 1 -not -name . -not -name repo1 -not -name .git -exec mv {} ./repo1 ;目录结构变成
1
2
3
4
5.
├── repo1
│ └── repo1
│ └── repo1.txt
└── repo2.txt在 repo1 Git 提交刚才的操作
在 repo2 中 将 repo1 作为远程仓库,添加进来,设置别名为 temp
cd ../repo2
git remote add temp ../repo1/从 repo1 中抓取数据到当前 repo2 仓库
git fetch temp
将 repo1 中抓来的 master 分支作为新分支 checkout 到本地,新分支名命名为 repo1
git checkout -b repo1 temp/master
切换回 repo2 的 master 分支,并将 repo1 分支合并到 master
git checkout master
git merge repo1删除 repo1 分支和远程地址 temp
git branch -d repo1
git remote remove temp
这样就可以了。大致思路就是伪造远程 repo1 仓库为 repo2 的一个分支,然后合并进来