◆
Git 放弃本地修改强制拉取远程更新
git 放弃本地修改,强制拉取更新
本地改得一团糟、又不想花时间一个个 checkout 回去时,最省事的做法是直接把工作区推平到和远程一致。直接 git pull 这时候往往不管用:本地有未提交的改动会被拒绝合并,或者提交历史已经和远程分叉,拉下来只会得到一堆冲突。
思路是先把远程最新内容取下来但不合并,再用 reset --hard 把 HEAD 和工作区一起挪到远程分支那个点上,本地的差异就全部丢掉了。适用场景是本地改动确认不要了,比如临时调试代码、误改了大量文件、或者只是想拿一份干净的最新代码。
开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到 Git pull 的强制覆盖,具体代码如下:
git fetch --all
git reset --hard origin/master
git pull
git fetch 指令是下载远程仓库最新内容,不做合并
git reset 指令把HEAD指向master最新版本
注意事项
reset --hard会连同已跟踪文件的未提交改动一起丢弃,且不进 reflog 之外的任何地方,基本不可恢复。执行前如果还有一丝犹豫,先git stash存一份,确认没用了再git stash drop。- 命令里的
origin/master要换成自己实际的远程分支名,现在新仓库默认多是main,写错分支会把代码重置到另一条线上去。 - 未被 git 跟踪的新文件(
git status里的 Untracked)不受reset --hard影响,会原地保留。要一并清掉得用git clean -fd,这个命令同样不可撤销,建议先git clean -nd看看会删哪些。

还没有留言,来发表第一条吧~