无GitLab管理员权限如何通过CI同步仓库到GitHub并删除差异避免多余提交
问题原因
- 你使用的
merge逻辑存在天然缺陷:即使指定了--strategy-option=theirs,合并两个无关历史的仓库时,Git不会主动删除目标仓库中源仓库不存在的文件,只会合并两边的内容,最终出现文件叠加的问题 - 合并操作本身会生成一条独立的合并提交,就是你看到的多余提交的来源
修正后命令
不需要走合并流程,直接强制推送源分支内容覆盖目标分支即可,完全满足你的需求:
# 非必须:如果GitLab CI默认是浅克隆,先拉取完整历史避免推送报错 git fetch --unshallow # 配置Git用户信息 git config --global user.name "$github_username" git config --global user.email "$github_email" # 可留空,建议填写你的GitHub绑定邮箱 # 添加GitHub目标仓库作为远端 git remote add github https://$github_username:$github_token@$github_url # 直接将GitLab源仓库的main分支强制推送到GitHub目标仓库的main分支,完全覆盖目标原有内容 git push -f github origin/main:main
如果你的源仓库默认分支不是main,替换命令中对应的分支名即可。
效果说明
执行后GitHub目标仓库的main分支的提交历史、文件结构会和GitLab源仓库完全一致,不会产生任何多余的合并提交,也不会残留目标仓库原有的D、E、F等文件。
内容的提问来源于stack exchange,提问作者hammer89
相关产品推荐
相关产品推荐

