我如何强制将本地文件覆盖在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 clean
删除所有未跟踪的文件/目录,无法撤销。
有时只是偶尔clean -f
如果您有未跟踪的主管, -d 选项也需要 :
# WARNING: this can't be undone!
git reset --hard HEAD
git clean -f -d
git pull
警告: 警告:git clean
删除所有未跟踪的文件/目录,无法撤销。
考虑使用-n
(--dry-run
) 旗号先行。这将显示要删除的内容,但实际上没有删除任何内容:
git clean -n -f -d
示例产出:
Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...
如果您正在制定您的代码, 发现新的更改是一个巨大的错误或意外, 您可以简单地使用其他选项, 比如 :
git restore .
。指目录中的所有文件。
这个解决方案总是在运行 。
cd $GIT_ROOT_DIRECTORY
git fetch origin/$TARGET_BRANCH
git rm -rf --cached .
git reset --hard origin/TARGET_BRANCH
git clean -df
git pull origin $TARGET_BRANCH
我总结了其他答案 你可以执行git pull
无错误 :
git fetch --all
git reset --hard origin/master
git reset --hard HEAD
git clean -f -d
git pull
警告警告警告警告:这个脚本非常强大,所以你可能会失去变化。
看起来最好的办法是首先做到:
git clean
删除所有未跟踪的文件,然后继续按常规git pull
...