适用场景:已有一个新仓库A,有一个旧仓库B,B中有之前存在的代码,现在需要将A中所有的代码和commit信息都提交并覆盖B中的内容。
1. 克隆旧仓库B(目标仓库)
首先,需要从 GitLab 上克隆目标仓库(即你想覆盖的旧仓库),在你的本地机器上执行以下命令:
git clone <旧仓库的 URL>
cd <旧仓库的目录> 或直接vscode打开
2: 添加新仓库A作为远程仓库
然后需要将新仓库添加为远程仓库,以便能够将新仓库的内容推送到目标仓库。假设你的新仓库 URL 是 <新仓库的 URL>,可以使用以下命令:
git remote add new-origin <新仓库的 URL>
3: 拉取新仓库的内容
接下来,拉取新仓库的内容到你的本地仓库:
git fetch new-origin
3.1 创建一个新的空分支(非必需)
为了忽略 commit 记录,你可以创建一个新的空分支:
git checkout --orphan new-branch
4: 覆盖旧仓库的内容
此时,新仓库的内容已经拉取到本地,但需要将其强制推送到旧仓库,可以通过以下命令实现:
git reset --hard new-origin/main
注意:这里假设新仓库的默认分支是 main,如果是其他分支(例如 master),请相应调整命令中的分支名称。
reset --hard 会将本地仓库的内容重置为新仓库中的内容,同时保留新仓库的 commit 历史。
5: 推送到旧仓库
最后,将重置后的内容推送到目标仓库(即旧仓库),并使用 --force 参数来强制覆盖目标仓库的内容:
git push origin main --force
注意:如果目标仓库的默认分支是 master,将 main 替换为 master。