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

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


当前回答

所有这些解决方案的问题在于,它们要么过于复杂,要么是一个更大的问题,就是它们从网络服务器上移除了所有未跟踪的文件,我们并不想这样做,因为服务器上总是有需要的配置文件,而不是Git仓库。

以下是我们使用的最干净的解决方案:

# Fetch the newest code
git fetch

# Delete all files which are being added, so there
# are no conflicts with untracked files
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
    rm -f -- "$file"
done

# Checkout all files which were locally modified
for file in `git diff --name-status | awk '/^[CDMRTUX]/ {print $2}'`
do
    git checkout -- "$file"
done

# Finally pull all the changes
# (you could merge as well e.g. 'merge origin/master')
git pull
  • 第一个命令获取最新数据 。

  • 第二次命令检查是否正在将任何文件添加到存储库中,并从本地存储库中删除那些会造成冲突的未跟踪文件。

  • 第三个命令检查所有本地修改的文件 。

  • 最后,我们努力更新最新版本, 但这次没有任何冲突, 因为回购中的未追踪文件已经不存在了, 所有本地修改过的文件都已经和存储库一样了。

其他回答

警告,如果您在 gitignore 文件中有任何目录/ * 条目, 这样做将永久删除您的文件 。

有些答案似乎很可怕。 从发生在Lauri身上的可怕意义来看,

相反(给予 > v1.7.6):

git stash --include-untracked
git pull

稍后,您可以清理藏匿历史。

手动,一对一:

$ git stash list
stash@{0}: WIP on <branch>: ...
stash@{1}: WIP on <branch>: ...

$ git stash drop stash@{0}
$ git stash drop stash@{1}

残酷地说,所有 - 一次:

$ git stash clear

当然,如果你想回到你藏的东西:

$ git stash list
...
$ git stash apply stash@{5}

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

git clean

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

重置索引和头部origin/master,但不要重置工作树:

git reset origin/master

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

git reset --hard HEAD
git pull

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

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

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

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