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

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


当前回答

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

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

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

其他回答

我读了所有的答案,但我正在寻找一个命令来做到这一点。这是我所做的。在.gitconfig中添加了一个Git 化名。

[alias]
      fp = "!f(){ git fetch ${1} ${2} && git reset --hard ${1}/${2};};f"

将命令运行为

git fp origin master

等于

git fetch origin master
git reset --hard origin/master

一旦您进行了 Git 拖动, 您就会得到不匹配的文件列表。 如果文件数量不大, 那么您就可以检查这些文件, 此动作将会覆盖这些文件 。

git 检出 - <filename>

我通常会这样做, 如果为了快速检查, 我修改服务器上的本地文件( 没有推荐的, 以及您在获取此议题: D 背后的理由) , 我找到解决方案后会检查被修改的文件 。

我认为答案很可怕,但虽然赫奇猪的答案可能更好,但我不认为它能有那么优雅。fetchmerge使用定义的战略, 从而保存您本地的更改, 只要它们不是您试图强制覆盖的文件之一 。

首先对您的更改进行承诺

 git add *
 git commit -a -m "local file server commit message"

如果有冲突, 取回更改并覆盖

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

-X是一个选项名称,并且theirs是此选项的值。 您选择使用their更改(另一个选项是ours如果有冲突,则更改。

您可能会发现此命令有助于丢弃本地更改 :

git checkout <your-branch> -f

然后进行清理(从工作树上移走未追踪的文件) :

git clean -f

如果您想要除去未跟踪的文件之外, 还要删除未跟踪的目录 :

git clean -fd

这是恢复变革的最佳做法:

  • git commit提交您预置的更改, 以便将其保存在reflog 格式的reflog(见下文)
  • git fetch获取最新的上游变化
  • git reset --hard origin/master硬重置源主分支

缩略reflog 格式的reflog 本地存储库中正在更新的记录分支和其他参考资料简简简简简简简reflog 格式的reflog更改的历史历史.

因此,这总是一个伟大的实践 承诺。 承诺被附在折叠件上, 以确保您永远有办法检索删除的代码 。