如何在执行 git pull
命令时强制覆盖本地文件?我的本地仓库中包含与服务器上相同文件名的文件。
错误:无法完成合并,未跟踪的工作树文件 'example.txt' 将被覆盖。
如何在执行 git pull
命令时强制覆盖本地文件?我的本地仓库中包含与服务器上相同文件名的文件。
错误:无法完成合并,未跟踪的工作树文件 'example.txt' 将被覆盖。
我遇到了同样的问题,但是即使执行git clean -f -d
也无法解决。原因在于:如果你的文件被Git忽略(我猜测是通过.gitignore文件),Git仍然会在后续的pull操作中考虑覆盖这个文件,但是除非你添加-x
参数,否则clean命令不会将其删除。
我认为导致冲突的可能有两个原因,必须分开解决。根据我所知,以上的回答都没有同时处理这两种原因:
未跟踪的本地文件需要删除,可以手动删除(更安全),也可以按照其他答案建议使用 git clean -f -d
命令。
不在远程分支上的本地提交也需要删除。我认为最简单的方法是使用命令:git reset --hard origin/master
(将 'master' 替换为您正在工作的任何分支,并先运行 git fetch origin
命令)
更简单的方法是:
git checkout --theirs /path/to/file.extension
git pull origin master
这将会用git上的文件覆盖你本地的文件。
我遇到了一个奇怪的情况,无论是 git clean
还是 git reset
都不起作用。我必须使用以下脚本从每个未跟踪的文件中删除与冲突文件相关的 git index
:
git rm [file]
然后我就能够很好地拉取(代码)。
git update-index --assume-unchanged <file>
- skupjoe我知道一种更简单、更不痛苦的方法:
$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp
就是这样了!
origin/<branch_to_force_pull>
。 - Henke我刚刚通过以下方式解决了这个问题:
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
"last" 命令会列出你的本地修改记录。继续修改 "tmp" 分支,直到满意后,使用以下命令将其合并回主分支:
git checkout master && git merge tmp
下次,你可以通过查找“git stash branch”来更加清晰地处理这个问题。不过,在前几次尝试中,stash 可能会给你带来麻烦,所以首先在一个非关键项目上进行实验。
做就对了
git fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname
所以,您可以避免所有不需要的副作用,比如删除您想要保留的文件或目录等。
checkout -f
切换到我想要合并的分支,这样就可以摆脱所有有问题的未跟踪文件。然后我可以再次切换到我的目标分支,最后顺利地进行合并。 - Patrick Parker需求:
解决方案:
Fetch with a clean of files and directories ignoring .gitignore and hard reset to origin.
git stash --include-untracked
git fetch --all
git clean -fdx
git reset --hard origin/master
尽管最初的问题不同,但是顶级答案可能会给有类似问题的人带来麻烦,因为他们不想丢失本地文件。例如,请参阅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
。
将索引和 HEAD 重置为 origin/master
,但不要重置工作树:
git reset origin/master
origin/branch_to_overwrite
相同的状态,包括代码和提交记录。命令为:git reset --hard origin/branch_to_overwrite
。 - Andrew Atkinsongit branch <branch> -D
git reset <commit> --hard
git branch <branch>
git --set-upstream-to=origin/<branch> <branch>
git pull
git config core.autocrlf false; git ls-files -z | xargs -0 rm; git checkout .
。 - Chloe