我如何强制将本地文件覆盖在git pull我的本地仓库包含一个文件名文件名与服务器上的文件名相同。

错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖


当前回答

比较容易的方式是:

git checkout --theirs /path/to/file.extension
git pull origin master

这将用 Git 上的文件覆盖您的本地文件

其他回答

这将删除所有未承诺的更改, 然后拉动 :

git reset --hard HEAD
git pull

我刚刚解决了这个问题 自己:

git checkout -b tmp # "tmp" or pick a better name for your local changes branch
git add -A
git commit -m 'tmp'
git pull
git checkout master # Or whatever branch you were on originally
git pull
git diff tmp

最后一个命令给出您本地更改的列表。 继续修改“ tmp” 分支, 直至它可以接受, 然后将它合并为母版 :

git checkout master && git merge tmp

下次,你也许可以用更干净的方式处理这件事, 找到"Git 藏宝分支",虽然藏宝在最初的几例尝试中 可能会给你带来麻烦, 所以首先试验一个非关键项目...

我也有同样的问题,而且出于某种原因,git clean -f -d这就是为什么:出于某种原因, 如果你的档案被Git(通过.gitignore 条目,我想,通过.gitignore 条目)忽略了, 它仍然费了时间,拉拉拉,但一个清洁除非添加, 否则不会删除它-x.

首先,尝试标准的方式:

git reset HEAD --hard # To remove all not committed changes!
git clean -fd         # To remove all untracked (non-git) files and folders!

警告警告警告警告:上端命令只有在您没有指定数据/文件时才能导致数据/文件丢失!如果您不确定,请先将整个仓库文件夹的备份作为首选 。

然后再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次

如果上面没有帮助,你也不关心你的未追踪文件/目录(在万一情况下先备份),请尝试以下简单步骤:

cd your_git_repo  # where 'your_git_repo' is your git repository folder
rm -rfv *         # WARNING: only run inside your git repository!
git pull          # pull the sources again

这将重新移动所有 git 文件( 豁免).git/(dir,你们都承诺过的地方) 并再次拉动它。


为什么git reset HEAD --hard在某些情况下会失败吗?

  1. 自定义规则.gitattributes file

    拥有( 拥有)eol=lf. givatritites 中的规则可能导致 Git 将 CRLF 线条转换为某些文本文件中的 LF , 从而修改某些文件更改 。

    如果情况如此,你必须实施这些CRLLF/LF的改变(通过在git status),或尝试:git config core.autcrlf false暂时忽视他们。

  2. 文件系统不兼容

    当您使用不支持权限属性的文件系统时。 例如, 您有两个仓库, 一个在 Linux/ Mac (Linux/ Mac) 上 。ext3/hfs+和另一个基于FAT32/NTFS的文件系统。

    您注意到,有两种不同的文件系统, 所以不支持 Unix 权限的系统基本上不能在不支持这种权限的系统上重置文件权限, 所以不管如何--hard你试试看,GIT总能察觉到一些"变化"

尽管最初提出这个问题,但顶尖的答案会给有类似问题的人造成问题,但不想失去本地文件。例如,见Al-Punk和CrizCraig的评论。

以下版本对临时事务组(临时事务组)进行本地变更(临时事务组)tmp检查原始分支(我假设master)和合并更新。您可以用stash,但我发现通常更容易使用分支/合并方法。

git checkout -b tmp
git add *; git commit -am "my temporary files"
git checkout master

git fetch origin master
git merge -s recursive -X theirs origin master

我们假设其它存储库origin master.