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

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


当前回答

1 步( 可选) 从您本地仓库根部中选择, 保存备份, 并清空当前文件夹 :

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

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

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

将 & lt;branch&gt; 替换为您想要覆盖的分支名称 。

评论:

您可能宁愿手动备份并删除当前文件和文件夹, 而不是第 1 步, 事实上, 我建议您在操作系统 gui 中用一个文件手处理器这样做。 如果您跳过第 1 步, 请注意 : 您将失去本地仓库中的所有工作 ! 重要 : 如果您退出 Git pull 在第 2 步中拖动, 您可能无法从远程仓库获取最新版本 。 根据下面的第二个引用, git 重置 -- hard 将会重置中转区域, 工作目录会匹配

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

其他回答

i 认为冲突有两种可能的原因,必须分别解决,而且只要我能够看出上述答案没有涉及两个问题:

未跟踪的本地文件需要删除, 手动( 安全) 或按照其他回答中的建议, 由 Git 清洁 - f - d 本地承诺删除, 不在远程分支的本地承诺也需要删除 。 最容易实现的方法是: git 重设 - hard 来源/ master (由您正在工作的分支替换“ 主机 ” , 并先运行 git 抓取来源 )

如果您不总是想要粘贴分支名称, 或者您想要在脚本中自动显示此分支名称, 这里是一个通用的解决方案 。

git fetch
git reset --keep origin/$(git rev-parse --abbrev-ref HEAD)

如果您也想重置本地更改 :

git fetch
git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)

您也可以使用此命令添加一个弹片别名 :

alias gplf='git fetch && echo "HEAD was at $(git rev-parse --short HEAD)" && git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)'

这里的答案似乎大多集中在主分支上; 但是,有时我在两个不同的地方 研究同一个功能分支, 我希望一个在另一个在重新基点上得到反映, 而不是跳过很多圈子。

根据Rna的回答和Torek对类似问题的回答, 我得出了一个非常有效的答案:

git fetch
git reset --hard @{u}

从一个分支运行它, 它只会重新设置你的地方分支 到上游版本。

也可以将它写进别名(git strengpull)中:

git 配置别名.forcepull "! git 获取; git 重设 - hard u}"

或者,在您的. git config 文件 :

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

享受吧!

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

git 承诺执行您的分阶段更改, 以便将其保存在 reflog( 见下文) git 获取最新的上游更改 git 重设 -- 硬源/ master 硬重置到源主分支

reflog 记录本地仓库中更新的分支和其他引用。 或简单地放入 - reflog 是您更改的历史 。

所以这总是一个伟大的实践 承诺。 承诺被附在折叠纸上, 保证你永远有办法 检索删除的代码 。

一种比较容易的方式是:

git checkout --theirs /path/to/file.extension
git pull origin master

这将在 Git 上的文件上覆盖本地文件