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

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


当前回答

我总结了其他答案 你可以执行git pull无错误 :

git fetch --all
git reset --hard origin/master
git reset --hard HEAD
git clean -f -d
git pull

警告警告警告警告:这个脚本非常强大,所以你可能会失去变化。

其他回答

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

git reset --hard HEAD
git pull

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

我解决它的方法是:

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

现在它的工作原理。

步骤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 fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname

因此,您可以避免所有不想要的副作用, 比如删除您想要保存的文件或目录, 等等 。

警告:

对已跟踪文件的本地更改将丢失 。 @ info: whatsthis

任何本地文件吉特追踪到的不会受到影响。


第一,更新所有origin/<branch>最晚的 refs :

git fetch --all    # if this doesn't work try `git pull -f` (see comments)

备份当前分支( 例如 )master):

git branch backup-master

跳转到最新承诺origin/master并检出这些文件 :

git reset --hard origin/master

解释:

git fetch从远程下载最新数据,不试图合并或重标任何内容。

git reset将主分支重置为您刚获取的 。--hard选项选项 更改工作树中的全部文件以匹配文件origin/master.


维持当前当地承诺

[*]值得指出的是,通过从master在重设前:

git checkout master
git branch new-branch-to-save-current-commits
git fetch --all    # if this doesn't work try `git pull -f` (see comments)
git reset --hard origin/master

在那之后,一切旧事,将永居其中;new-branch-to-save-current-commits.

未承付的更改

将丢失未承诺的更改( 即使是第 阶段的更改) 。 请确保隐藏并承诺您需要的一切 。 为此您可以运行以下操作 :

git stash

然后重新应用这些未承诺的修改:

git stash pop