原文:How to Overwrite Local Files with Git Pull

如果你觉得有必要放弃所有的本地修改,用远程分支的副本来重置/覆盖一切,那么你应该遵循这个指南。

重要提示:如果你有任何本地修改,它们将被丢失。无论是否有 --hard 选项,任何没有被推送的本地提交都会丢失。

如果你有任何不被 Git 追踪的文件(例如上传的用户内容),这些文件将不会受到影响。

覆盖的工作流程

要覆盖你的本地文件,请执行以下操作:

git fetch --all
git reset --hard <remote>/<branch_name>

例如:

git fetch --all
git reset --hard origin/master

它是如何工作的

git fetch 从远程下载最新的内容,而不尝试 merge 合并或 rebase 变基任何东西。

然后 git reset 将主干分支重置为你刚取来的东西。--hard 选项会改变你工作树中的所有文件,使之与 origin/main 中的文件一致。

其他信息

值得注意的是,在重置之前,可以通过从 main 或你想工作的任何一个分支创建一个分支,来保持当前的本地提交。

例如:

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master

在这之后,所有的旧提交将被保留在 new-branch-to-save-current-commits 中。然而,未提交的修改(甚至是暂存的)将被丢失。请确保把你需要的东西保存起来并提交。

本文参考了 Stack Overflow 的一个问题