ZH ·
🌏 English Git 如何强制拉取远程代码并覆盖本地修改
问题
在久未同步的测试机上尝试更新代码仓库时,Git 往往会抛出以下错误:
error: Your local changes to the following files would be overwritten by merge:
app/client.py
...
configs/file.yml
Please commit your changes or stash them before you merge.
Aborting
由于在测试机上为了调试直接修改了代码,导致本地存在未提交的更改,从而阻止了 git pull 的正常执行。在某些场景下,我们希望直接忽略本地修改,强制将代码库重置为远程仓库的最新状态。
解决方案
若要达成此目的,可以通过以下命令序列实现:
git fetch
git branch backup-master
git reset --hard origin/master
其中,第一行用于获取远程仓库的最新状态,第二行将当前的本地状态保存到一个分支中以备不时之需,第三行则执行强制重置,使本地仓库与远程 master 分支完全同步。
如果执行后仍有疑虑,或发现代码未更新至最新状态,可以补充执行以下命令:
git reset --hard HEAD
git pull
总结
测试机上的修改通常仅限于配置参数(如服务器地址或线程数)。若这些修改不影响新版本测试,直接覆盖是最快捷的方式。
如果本地改动具有一定价值,建议在强制覆盖前先进行备份或合并。例如,使用 stash 暂存改动:
git fetch
git stash
git merge '@{u}'
git stash pop
更多技术细节,请参考: