由于工作生活中使用两台电脑(一台家用PC + 一台随时写作的Macbook)并且本博客的大部分工作都是在PC上面完成的。
今天在Macbook上写博客写完文章发现机器上的文件夹一塌糊涂。担心产生冲突遂打算放弃Macbook上所有本地文件(包括未提交和已提交的),完全同步为远程状态(当前托管在Github),以下是本次用到的 Git 命令:
# 1. 下载远程仓库的最新修改和分支信息(但不自动合并)
git fetch --all
# 2. 把当前分支强制重置到对应远程分支
# 注意:将 main 替换为你当前使用的分支名(如 master or dev)
git reset --hard origin/main
# 3. (可选)清理本地没有被 Git 追踪的零碎文件或者文件夹
git clean -fd
git rest -- hard操作不可逆。执行后本地所有未提交代码,以及本地的 commit 都会彻底消失,记得注意备份。
上面是强行使用整个远程仓库覆盖整个本地仓库的方法,下面是一些精细化拓展操作方式:
- 只想要远程的某个“特定文件”
如果整体代码没问题,只是把某一个或几个重要文件改乱了,想单独恢复这几个文件,没必要重置整个分支:
git checkout origin/<分支名> -- <文件路径/文件名>- 强推(Push)反向同步——用本地强制覆盖远程
有时候情况相反,本地的代码才是对的,远程由于历史冲突提交不上去。想让远程听你的,可以使用强制推送:
git push origin <分支名> --force
# 或者更安全的做法(如果远程在你上次拉取后有新提交,会拒绝执行,避免误杀队友代码)
git push origin <分支名> --force-with-lease多人协作时,执行 git push –force 前,务必通知其他合作者,否则队友下次 git pull 可能会遭遇代码人生滑铁卢。