原文: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 的一个问题。