解决GitHub远程修改文件名后本地仓库无法推送的分支冲突问题
解决文件名大小写修改后无法推送的问题
我来帮你搞定这个问题——核心是本地和远程分支已经分叉,而你担心直接git pull会搞乱本地的未推送修改,完全理解这种顾虑!试试下面的安全步骤,既能保留本地所有修改,又能解决推送问题:
第一步:先给本地分支做备份(防错必备)
先创建一个本地分支的备份,万一操作出问题,随时可以回退到当前状态:
git branch main-backup
第二步:拉取远程最新提交但不合并
用fetch代替pull,只把远程的最新变更拉到本地,不会自动合并你的本地提交:
git fetch origin
第三步:用变基(Rebase)对齐远程分支
把你本地的3个提交“移到”远程最新提交的后面,这样提交记录更整洁,也能精准处理文件名的冲突:
git rebase origin/main
这时候Git会提示文件名的冲突(因为远程改了文件名大小写,本地还是旧的),按以下步骤处理:
- 先查看当前冲突状态:
git status - 你会看到文件名大小写不一致的提示,由于Windows/macOS默认文件系统不区分大小写,直接改大小写系统识别不了,所以先临时改名再改回目标大小写:
# 比如原来的文件名是oldFile.txt,要改成OldFile.txt git mv oldFile.txt temp-temp-file.txt git mv temp-temp-file.txt OldFile.txt - 将修改后的文件名加入暂存区:
git add . - 继续完成变基:
git rebase --continue
第四步:推送本地修改
如果变基过程没有其他问题,现在本地分支已经和远程分支对齐了,直接推送即可:
git push
补充:为什么之前的git mv没生效?
因为Windows和macOS的默认文件系统是不区分文件名大小写的,直接执行git mv oldFile.txt OldFile.txt时,系统认为文件名没有变化,Git也就检测不到这个修改。必须先改成临时名称,再改回目标大小写,才能让Git识别到大小写变更。
附你之前执行的命令及输出:
cd would-you-rather git add . git commit -m '9th commit' On branch main Your branch and 'origin/main' have diverged, and have 3 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) nothing to commit, working tree clean git push To https://github.com/xxxx/xxx.git ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 'https://github.com/xxx/xxx.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
内容的提问来源于stack exchange,提问作者Evan Parker
相关产品推荐
相关产品推荐

