我如何强制将本地文件覆盖在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
  • 第一个命令获取最新数据 。

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

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

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

其他回答

步骤1。 (可选择)
从本地主控件库的根根, 保存备份和空当前文件夹:

mkdir -p ../<branch>-bkp && mv --backup=t * ../<branch>-bkp

步骤2从远程仓库下载分支的所有文件和文件夹 :

git checkout <branch> && git add -A . && git reset --hard origin/<branch> && git pull

替换位置<branch>使用要覆盖的分支的名称。

评论:

  • 你可能更喜欢手动手动将当前文件和文件夹替换为步骤1.
    事实上,我建议建议建议建议建议在操作系统的 GUI 中与文件管理员一起这样做 。
  • 如果你跳过步骤1注意: 您将失去本地仓库的所有工作 !
  • 重要:如果你离开,git pull步骤2,
    您可能无法从远程仓库获取最新版本!
    根据下文的第二个参考,git reset --hard
    重置中继区和工作目录以匹配最近的承诺.
    我的经历与这个说法相矛盾!
  • 如果你逃跑git reset --hard origin/<branch_to_overwrite>不要先从本地主控库删除所有文件和文件夹, 请小心, 任何仍然埋在周围的垃圾文件都可能偷偷潜入远程仓库 。git push即使这不是你的本意
    额外git add -A .步骤2如果您选择退出, 防止发生这种情况步骤1.

参考文献:
https://gitforwindows.org/
https://www.atlassian.com/git/tutorials/undoing-changes/git-reset
https://www.atlassian.com/git/tutorials/rewriting-history/git-reflog

警告: 警告:git clean删除所有未跟踪的文件/目录,无法撤销。


有时只是偶尔clean -f如果您有未跟踪的主管, -d 选项也需要 :

# WARNING: this can't be undone!

git reset --hard HEAD
git clean -f -d
git pull

警告: 警告:git clean删除所有未跟踪的文件/目录,无法撤销。

考虑使用-n (--dry-run) 旗号先行。这将显示要删除的内容,但实际上没有删除任何内容:

git clean -n -f -d

示例产出:

Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...

我也有同样的问题 没人给我这个解决方案 但对我有用

我解决它的方法是:

  1. 删除全部文件。 仅留下.git目录。
  2. git reset --hard HEAD
  3. git pull
  4. git push

现在它的工作原理。

尽管这个问题已经有许多答案,但最初的问题是解决这个问题。

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

由于二进制文件无法合并, 简单的答案是

git checkout public/images/icon.gif

有了这个文件,文件就会恢复到它在这个分支的原有状态。

我平平平平平平平平git stash如果我不想失去我的改变或类似的东西git checkout .如果我不在乎本地修改的文件的话 海事组织比海事组织简单得多reset --hard, clean...所有这些东西更适合 离开分支的远程, 包括承诺,未跟踪的文件, 而不是仅仅解决一个本地修改过的文件。

我刚刚解决了这个问题 自己:

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

最后一个命令给出您本地更改的列表。 继续修改“ tmp” 分支, 直至它可以接受, 然后将它合并为母版 :

git checkout master && git merge tmp

下次,你也许可以用更干净的方式处理这件事, 找到"Git 藏宝分支",虽然藏宝在最初的几例尝试中 可能会给你带来麻烦, 所以首先试验一个非关键项目...