我如何强制将本地文件覆盖在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
其他回答
我认为答案很可怕,但虽然赫奇猪的答案可能更好,但我不认为它能有那么优雅。fetch
和merge
使用定义的战略, 从而保存您本地的更改, 只要它们不是您试图强制覆盖的文件之一 。
git add *
git commit -a -m "local file server commit message"
git fetch origin master
git merge -s recursive -X theirs origin/master
-X
是一个选项名称,并且theirs
是此选项的值。 您选择使用their
更改(另一个选项是ours
如果有冲突,则更改。
在 Windows 上执行此单命令 :
git fetch --all & git reset --hard origin/master
首先,尝试标准的方式:
git reset HEAD --hard # To remove all not committed changes!
git clean -fd # To remove all untracked (non-git) files and folders!
警告警告警告警告:上端命令只有在您没有指定数据/文件时才能导致数据/文件丢失!如果您不确定,请先将整个仓库文件夹的备份作为首选 。
然后再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次,再拉一次
如果上面没有帮助,你也不关心你的未追踪文件/目录(在万一情况下先备份),请尝试以下简单步骤:
cd your_git_repo # where 'your_git_repo' is your git repository folder
rm -rfv * # WARNING: only run inside your git repository!
git pull # pull the sources again
这将重新移动所有 git 文件( 豁免).git/
(dir,你们都承诺过的地方) 并再次拉动它。
为什么git reset HEAD --hard
在某些情况下会失败吗?
自定义规则.gitattributes file
拥有( 拥有)eol=lf
. givatritites 中的规则可能导致 Git 将 CRLF 线条转换为某些文本文件中的 LF , 从而修改某些文件更改 。
如果情况如此,你必须实施这些CRLLF/LF的改变(通过在git status
),或尝试:git config core.autcrlf false
暂时忽视他们。
文件系统不兼容
当您使用不支持权限属性的文件系统时。 例如, 您有两个仓库, 一个在 Linux/ Mac (Linux/ Mac) 上 。ext3
/hfs+
和另一个基于FAT32/NTFS的文件系统。
您注意到,有两种不同的文件系统, 所以不支持 Unix 权限的系统基本上不能在不支持这种权限的系统上重置文件权限, 所以不管如何--hard
你试试看,GIT总能察觉到一些"变化"
尽管最初提出这个问题,但顶尖的答案会给有类似问题的人造成问题,但不想失去本地文件。例如,见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
.
我用这个命令清除了本地文件, 阻止我进行拉/ 合并。 但是要小心! 运行 !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
将呼吁每个以白色空格开始的行 。