一尘不染

如何强制“git pull”覆盖本地文件?

git

如何强制覆盖本地文件git pull

场景如下:

  • 一名团队成员正在修改我们正在开发的网站的模板
  • 他们正在向图像目录添加一些图像(但忘记在源代码控制下添加它们)
  • 他们通过邮件将图像发送给我
  • 我在源代码控制下添加图像并将它们连同其他更改一起推送到 GitHub
  • 他们无法从 GitHub 拉取更新,因为 Git 不想覆盖他们的文件。

这是我得到的错误:

错误:未跟踪的工作树文件“public/images/icon.gif”将被合并覆盖

如何强制 Git 覆盖它们?此人是一名设计师 - 通常,我会手动解决所有冲突,因此服务器具有他们只需要在其计算机上更新的最新版本。


阅读 326

收藏
2021-12-30

共1个答案

一尘不染

⚠ 重要提示:如果您有任何本地更改,它们将丢失。无论是否有--hard选项,任何未推送的本地提交都将丢失。[*]

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


首先,运行 fetch 将所有origin/<branch>refs更新为最新:

git fetch --all

备份您当前的分支:

git branch backup-master

然后,您有两个选择:

git reset --hard origin/master

或者如果您在其他分支机构:

git reset --hard origin/<branch_name>

解释:

git fetch 从远程下载最新版本,而无需尝试合并或重新设置任何内容。

然后将git reset主分支重置为您刚刚获取的内容。该--hard选项更改工作树中的所有文件以匹配origin/master


维护当前的本地提交

[*]:值得注意的是,可以通过master在重置之前创建一个分支来维护当前的本地提交:

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.

未提交的更改

然而,未提交的更改(即使是暂存的)也会丢失。确保存储并提交您需要的任何内容。为此,您可以运行以下命令:

git stash

然后重新应用这些未提交的更改:

git stash pop
2021-12-30