Git本地存在提交但无法推送到远程,状态显示工作区干净的解决方法
问题描述
在使用SourceTree时遇到仓库实际存在但无法被识别的问题,尝试通过以下命令修复:
git remote rm origin git remote add origin https://GITHUB_USERNAME:PERSONAL_ACCESS_TOKEN@github.com/GITHUB_USERNAME/REPO_NAME.git
执行后出现以下异常:
- master分支旁标注可推送的“1”消失,多次推送都无法将本地最新提交同步到GitHub
- 执行
git status返回工作区干净,但git log能看到本地确实存在该最新提交 - 已排除
.gitignore影响,且执行上述命令前变更原本处于可推送状态 - 尝试
git update-index --really-refresh、删除.git/index再git reset均无效 - 切换回SSH地址
git@github.com:myuser/myrepo.git后,仍出现仓库找不到的错误
解决方案
1. 检查本地分支与远程分支的关联状态
首先确认本地master分支是否和远程的origin/master建立了跟踪关系,执行:
git branch -vv
如果输出里master分支后面没有显示origin/master相关的跟踪信息,说明关联丢失,执行以下命令重新关联:
git branch --set-upstream-to=origin/master master
关联完成后再执行git push尝试推送。
2. 验证远程仓库URL的正确性
执行git remote -v查看当前origin的URL,检查:
- 用户名、仓库名是否拼写正确
- HTTPS地址中的Personal Access Token是否有效(可重新生成带
repo权限的token,再更新URL)
更新URL的命令:
git remote set-url origin https://GITHUB_USERNAME:NEW_TOKEN@github.com/GITHUB_USERNAME/REPO_NAME.git
如果用SSH地址,检查本地SSH密钥是否已添加到GitHub账户:
- 生成密钥(如果没有):
ssh-keygen -t ed25519 -C "your_email@example.com" - 复制公钥内容:
cat ~/.ssh/id_ed25519.pub,粘贴到GitHub的SSH密钥设置中
3. 确认远程分支名称是否匹配
现在GitHub默认分支名是main而非master,如果远程分支是main,本地还是master会导致推送失败:
- 拉取远程分支信息:
git fetch origin - 查看远程分支:
git branch -r
如果远程是main,执行以下命令调整:
git branch -m master main # 本地分支重命名为main git branch --set-upstream-to=origin/main main git push
4. 强制推送(谨慎使用)
如果确认本地提交是最新的,且上述步骤无效,可尝试强制推送(会覆盖远程分支,避免多人协作时使用):
git push -f origin master
5. 修复SourceTree识别问题
Git层面问题解决后,重启SourceTree,或者通过「添加仓库」选择本地仓库路径,重新加载即可识别。
内容的提问来源于stack exchange,提问作者eComEvo
相关产品推荐
相关产品推荐

