我如何强制将本地文件覆盖在git pull
我的本地仓库包含一个文件名文件名与服务器上的文件名相同。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
我如何强制将本地文件覆盖在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 checkout <your-branch> -f
然后进行清理(从工作树上移走未追踪的文件) :
git clean -f
如果您想要除去未跟踪的文件之外, 还要删除未跟踪的目录 :
git clean -fd
我用这个命令清除了本地文件, 阻止我进行拉/ 合并。 但是要小心! 运行 !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 pull --force
或者通过使用git stash
然后运行git pull
.
尽管这个问题已经有许多答案,但最初的问题是解决这个问题。
错误: 未跟踪的工作树文件“ public/images/icon. gif” 会被合并覆盖
由于二进制文件无法合并, 简单的答案是
git checkout public/images/icon.gif
有了这个文件,文件就会恢复到它在这个分支的原有状态。
我平平平平平平平平git stash
如果我不想失去我的改变或类似的东西git checkout .
如果我不在乎本地修改的文件的话 海事组织比海事组织简单得多reset --hard
, clean
...所有这些东西更适合 离开分支的远程, 包括承诺,未跟踪的文件, 而不是仅仅解决一个本地修改过的文件。
尽管最初提出这个问题,但顶尖的答案会给有类似问题的人造成问题,但不想失去本地文件。例如,见Al-Punk和CrizCraig的评论。
以下版本对临时事务组(临时事务组)进行本地变更(临时事务组)tmp
检查原始分支(我假设master
)和合并更新。您可以用stash
,但我发现通常更容易使用分支/合并方法。
git checkout -b tmp
git add *; git commit -am "my temporary files"
git checkout master
git fetch origin master
git merge -s recursive -X theirs origin master
我们假设其它存储库是origin master
.