为什么拉取GitHub远程6.x-master分支代码到本地始终提示已更新却无源码
问题根因
- 你最初创建本地
6.x-master分支时,是直接从本地7.x-master分支checkout生成,没有和远程origin/6.x-master分支的内容做对齐,导致本地6.x-master分支初始内容就是仅含README的状态 - 后续你执行
git push操作时,直接将本地只有README的6.x-master分支推送到了远程,覆盖了远程原本存储完整源码的6.x-master分支,所以之后哪怕重新克隆指定分支也只能拿到仅含README的版本
恢复方案
第一步:找到远程6.x-master被覆盖前的提交哈希
执行命令查看远程6.x-master分支的提交历史,找到你push覆盖之前的最后一个合法提交哈希:
git reflog show origin/6.x-master
输出结果中,找到你执行push操作之前的那一条提交记录,对应的哈希值记为<old-commit-hash>,也就是你push之前远程6.x的最新提交哈希。
第二步:重置本地6.x-master分支到原有合法提交
git checkout 6.x-master git reset --hard <old-commit-hash>
执行完后用ls查看本地目录,就能看到完整的源码文件。
第三步:强制推送恢复远程6.x-master分支
git push origin 6.x-master --force
执行后远程6.x-master分支就会恢复到被覆盖之前的状态,后续正常执行git pull即可同步代码。
后续正确的分支拉取操作
如果之后需要拉取其他远程分支,不要直接从本地已有分支checkout创建,直接基于远程分支创建本地对应分支即可,命令如下:
git checkout -b <本地分支名> origin/<远程分支名> # 例如要拉取6.x-master分支就是 git checkout -b 6.x-master origin/6.x-master
这样创建的本地分支会直接和远程分支内容对齐,不会出现内容不一致的问题。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

