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

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


当前回答

我知道一种容易和痛苦的方法:

$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp

就是这样!

其他回答

看起来最好的办法是首先做到:

git clean

删除所有未跟踪的文件,然后继续按常规git pull...

我用这个命令清除了本地文件, 阻止我进行拉/ 合并。 但是要小心! 运行 !git merge …首先查看是否只有那些您真的想要删除的文件 。

git merge origin/master 2>&1 >/dev/null | grep ^[[:space:]] | sed s/^[[:space:]]//g | xargs -L1 rm
  • git merge列表中列出了所有这些文件。它们是由一些空白空间预设的。
  • 2>&1 >/dev/null将错误输出重定向到标准输出 1 。grep.
  • grep ^[[:space:]]只过滤带有文件名称的行。
  • sed s/^[[:space:]]//g从一开始就调整白空格。
  • xargs -L1 rm调来电话rm在每个文件上,删除它们。

谨慎地处理:git merge产出、产出、rm将呼吁每个以白色空格开始的行 。

对于那些不喜欢的人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


我认为,冲突有两种可能的原因,必须分别加以解决,而且据我所知,上述答案中没有一个涉及这两个问题:

  • 未跟踪的本地文件需要删除, 手动( 安全) 或按其他答案中的建议, 由git clean -f -d

  • 离子分支以外的当地承诺也需要删除。git reset --hard origin/master(取代“校长”的分支)git fetch origin(一)(一)

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

git reset --hard HEAD
git pull