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

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


当前回答

不要用git reset --hard这将抹去他们完全不可取的变化,相反:

git pull
git reset origin/master
git checkout <file1> <file2> ...

您当然可以使用git fetch代替git pull因为它显然不会合并, 但如果你通常拉它, 继续拉在这里是有道理的。

所以这里发生的事情就是git pull 更新您的源/ 主管参考; git reset 更新本地分支引用与来源/主管相同,不更新任何文件,所以您的检查状态没有变化;git checkout 将文件返回到您的本地分支索引状态需要时。如果在现场和上游主控上添加了完全相同的文件,索引已经与重置之后的文件匹配,因此在普通情况下,不需要做git checkout完全没有

如果上游分支也包含您想要自动应用的承诺,您可以跟踪进程上微妙的变异:

git pull
git merge <commit before problem commit>
git reset <problem commit>
git checkout <file1> <file2> ...
git pull

其他回答

“我的地方变化很小,或者我的地方变化不起作用。我只想将一切重置回到原创。我知道我的地方变化都将失去。”

如果情况是这样的话:

git reset --hard
git pull

我用这个命令清除了本地文件, 阻止我进行拉/ 合并。 但是要小心! 运行 !git merge …首先查看是否只有那些您真的想要删除的文件 。

git merge origin/master 2>&1 >/dev/null | grep ^[[:space:]] | sed s/^[[:space:]]//g | xargs -L1 rm
  • git merge列表中列出了所有这些文件。它们是由一些空白空间预设的。
  • 2>&1 >/dev/null将错误输出重定向到标准输出 1 。grep.
  • grep ^[[:space:]]只过滤带有文件名称的行。
  • sed s/^[[:space:]]//g从一开始就调整白空格。
  • xargs -L1 rm调来电话rm在每个文件上,删除它们。

谨慎地处理:git merge产出、产出、rm将呼吁每个以白色空格开始的行 。

对我唯一有用的是:

git reset --hard HEAD~5

这会让你背了五次承诺,然后

git pull

我通过向上看才发现如何解除 Git 合并.

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

git checkout <your-branch> -f

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

git clean -f

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

git clean -fd

回报 :

谈到前几个答复中的拉/拉/拉/加,我想分享一个有趣的和有成果的把戏,

git pull --rebase

以上命令是我Git生命中最有用的命令 拯救了很多时间

在将您新承诺推进到服务器之前, 请尝试此命令, 它会自动同步最新的服务器更改( 加上一个抓取+合并) , 并将您的承诺放在 Git 日志的顶部 。 无需担心手动拉动/ 合并 。

查找详细信息"Git pull -rebase"是做什么的?.