Git本地prod-env分支与远程分歧,如何安全覆盖本地变更?
本地Git分支与远程分支莫名分歧的问题排查与疑问
问题背景
本地未对仓库做任何变更,需要检出DevOps Git仓库的prod-env分支,查看某特定变更是否存在。执行git checkout prod-env时收到以下提示:
Your branch and 'origin/prod-env' have diverged, and have 1245 and 22 different commits each, respectively. (use "git pull" to merge the remote branch into yours)
按道理只有流水线会更新该分支,本地从未使用过它,完全不清楚分歧原因。
尝试的操作与异常
有人建议执行git clean,但收到报错:
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
改用git clean -n或git clean -i后无任何反应,但git status仍显示本地与远程有1245和22个不同提交。用IntelliJ的Git工具排查,也未发现任何差异。
对网上解决方案的疑问
网上搜到几种方案,但存在诸多顾虑和疑惑:
1. 关于git fetch --all的必要性
部分方案建议执行git fetch --all,但仓库有数百万分支,不想执行全量拉取。疑惑:已经在目标分支上,为什么要执行git fetch --all而非仅git fetch?
2. git reset --hard origin/prod-env与git reset --hard HEAD的区别
有方案建议执行:
git reset --hard HEAD git pull
想知道这两个命令哪个能解决当前问题?二者是否相同?为什么该方案没有先执行git fetch?
3. 硬重置后为何还需要git clean
还有帖子给出以下操作:
git fetch --all git reset --hard origin/master git reset --hard HEAD git clean -f -d git pull
既然git reset --hard已经是硬重置到指定提交,为什么还要执行git clean -f -d?
4. 重新克隆仓库是否是最安全的方案
如果是SVN,直接删除目录重新检出就能和服务器同步,完全无风险。那Git场景下,删除整个仓库目录重新克隆是不是最安全的解决方案?
内容的提问来源于stack exchange,提问作者John Little
相关产品推荐
相关产品推荐

