如何强制执行 "git pull" 并覆盖本地文件?

9510

如何在执行 git pull 命令时强制覆盖本地文件?我的本地仓库中包含与服务器上相同文件名的文件。

错误:无法完成合并,未跟踪的工作树文件 'example.txt' 将被覆盖。


48
如果您正在阅读此内容并认为自己可能会丢失文件,我曾经遇到这种情况,并发现Sublime Text的缓冲区保存了我的工作 - 如果我在某个项目上工作时,意外删除了所有内容,尝试解决类似于这个问题或使用此问题的答案,并且已经在Sublime中打开这些文件(有很大的可能性),那么文件仍将存在于Sublime中,可能是在其中,也可能在撤销历史记录中。 - Toni Leigh
303
重置当前分支到与远程分支origin/branch_to_overwrite相同的状态,包括代码和提交记录。命令为:git reset --hard origin/branch_to_overwrite - Andrew Atkinson
5
基本上,在初始的checkout -b之后,只需从develop分支进行一次pull操作,然后进行你的工作,完成后再将更改push回去。 - ldgorman
5
简短回答:删除并重新创建分支。
  1. 删除分支: git branch <branch> -D
  2. 重置到冲突之前的提交: git reset <commit> --hard
  3. 重新创建分支: git branch <branch>
  4. 设置跟踪服务器: git --set-upstream-to=origin/<branch> <branch>
  5. 拉取:git pull
- Nino Filiu
6
将所有的CRLF行尾符改为LF(以干净的方式开始),请执行以下操作:git config core.autocrlf false; git ls-files -z | xargs -0 rm; git checkout . - Chloe
显示剩余6条评论
53个回答

6
关键在于使用FETCH_HEAD
git fetch origin <your e.g. feature branch>
git reset --hard FETCH_HEAD

我尝试了 HEADgit pull,但都没有成功。


5
您可以在项目的基础文件夹中使用一个文件来忽略该文件:
.gitignore
public/images/*

拉取更改后,从你的gitignore文件中删除那行。


5
另一种解决方法是先使用git stash暂存任何未提交的更改,然后运行。
git pull --rebase=interactive -s recursive -X theirs

在交互式变基中,您可以将所有本地不需要的提交更改为drop,这将使它们消失并让您停留在远程分支的头部,而不会引入合并提交。
现在,如果您有要恢复的本地存储更改,则可以运行git stash apply

5

我的本地更改很小,或者我的更改没有生效。我只想将所有内容重置为原始状态。我知道所有我的本地更改都将丢失。

如果是这种情况:

git reset --hard
git pull

4

3

对于那些不喜欢使用reset的人,我喜欢这种方法:


git checkout branchname      # go to your branch
git fetch origin branchname  # fetch the remote
git checkout -b backup       # optionally, mark your remote as a backup
git branch -f branchname origin/branchname # force your local branch to be equal to the fetched origin/branchname



3
尽管这个问题已经有很多答案,但原始问题是要解决这个问题。

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

由于二进制文件无法合并,简单的答案是:
git checkout public/images/icon.gif

使用该命令,文件将可以在当前分支下恢复到之前的状态。

如果我不想丢失我的修改,我通常会运行 git stash 命令,如果我不关心本地修改的文件,我会使用类似于 git checkout . 的命令。在我看来,这比使用 reset --hardclean 等命令更简单易懂。这些命令更适用于保留分支的状态(包括提交和未跟踪的文件),而不仅仅是解决本地修改的文件。


2
一旦你执行git pull,你会得到一个不匹配的文件列表。 如果文件数量不是很大,那么你可以检出这些文件,这个操作将覆盖这些文件。
git checkout -- 我通常在服务器上修改本地文件进行快速检查(不推荐,可能是你遇到这个问题的原因:D),找到解决方案后,我会检出更改的文件。

2
git restore file_to_override_from_remote

git pull

git:'restore' 不是 git 命令。这是新命令吗? - Levsha

0
我曾陷入一个类似的问题,我的代码库在一个分支中,其中每个文件都被放在一个子文件夹myapp/subfolder中,这个命令可以清理历史记录。
 git clean -f -d 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接