如何在git pull
上强制覆盖本地文件?
场景如下:
这是我得到的错误:
error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge
如何强制 Git 覆盖它们?这个人是设计师 - 通常我会手动解决所有冲突,因此服务器具有他们只需要在他们的计算机上更新的最新版本。
--hard
选项,任何未被推送的本地提交都将丢失。 [*] 如果您有任何未被 Git 跟踪的文件(例如上传的用户内容),则这些文件不会受到影响。
我认为这是正确的方法:
git fetch --all
然后,您有两个选择:
git reset --hard origin/master
或者如果你在其他分支上:
git reset --hard origin/<branch_name>
git fetch
从远程下载最新版本而不尝试合并或重新绑定任何内容。
然后git reset
将 master 分支重置为刚刚获取的分支。 --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
尝试这个:
git reset --hard HEAD
git pull
它应该做你想要的。
警告: git clean
删除所有未跟踪的文件 / 目录,无法撤消。
有时只是clean -f
没有帮助。如果您有未跟踪的 DIRECTORIES,还需要 - d 选项:
# WARNING: this can't be undone!
git reset --hard HEAD
git clean -f -d
git pull
警告: git clean
删除所有未跟踪的文件 / 目录,无法撤消。
首先考虑使用-n
( - --dry-run
)标志。这将显示在没有实际删除任何内容的情况下将删除的内容:
git clean -n -f -d
输出示例:
Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...