Git新手求助:推送文件时无关文件混入GitHub仓库如何解决
问题原因与解决方法
问题根源
你一直在同一个本地Git仓库目录下操作两个远程仓库:file-1已经被提交到这个本地仓库的提交历史里了。当你切换远程仓库地址后推送main分支时,Git会把该分支上的所有提交记录(包括file-1的提交)同步到新的远程仓库,所以仓库2里会意外出现file-1。
修复步骤
1. 清理仓库2的错误内容
如果仓库2是刚创建的空仓库,没有其他重要内容,直接去GitHub仓库页面的「Settings」里找到「Delete this repository」删除仓库,重新创建一个空仓库即可。
如果仓库2已有其他内容,需要在本地修正后推送:
- 重置本地仓库到file-2提交前的状态(抹掉包含file-1的历史):
git reset --hard HEAD^ - 移除file-1的Git追踪(如果file-1还在本地目录,想彻底删掉就加下面的
rm命令):git rm --cached file-1 rm file-1 # 本地也删除file-1的话执行这条 - 重新提交file-2:
git add file-2 git commit -m "add file-2" - 强制推送到仓库2(注意:强制推送会覆盖远程仓库历史,确认远程没有其他人协作再执行):
git push -f origin main
2. 后续正确的多仓库操作方式
新手最稳妥的做法是给每个远程仓库分配独立的本地目录,不要在同一个本地仓库切换远程地址:
- 为仓库1单独建一个本地文件夹,克隆仓库1后在里面操作file-1的提交推送;
- 为仓库2单独建另一个本地文件夹,克隆仓库2后在里面创建file-2并提交推送;
- 仓库3同理,单独创建本地目录。
如果非要在同一个本地仓库管理多个远程(不推荐新手尝试),可以给不同远程设置别名,推送时指定目标远程:
# 添加仓库1远程,别名为repo1 git remote add repo1 <仓库1的GitHub地址> # 添加仓库2远程,别名为repo2 git remote add repo2 <仓库2的GitHub地址> # 推送到仓库1 git push repo1 main # 推送到仓库2(确保当前分支只有仓库2需要的内容) git push repo2 main
内容的提问来源于stack exchange,提问作者Wolverine Logan
相关产品推荐
相关产品推荐

