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

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


当前回答

不要使用 git 重置 -- hard. 来擦除他们可能完全不可取的更改。 相反 :

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

当然,你可以使用Git抓取而不是Git拉动, 因为显然它不会合并, 但如果你通常拉动它, 继续拉动这里是有道理的。

所以这里发生的情况是 git put 更新您的源/ 主管参考文件; git 重置更新您本地的分支引用与源/ 主管的引用相同, 无需更新任何文件, 所以您的检查状态没有变化; 然后按需要, git 检查退出将文件返回到您本地的分支索引状态 。 如果在现场和上游主控中添加了完全相同的文件, 索引已经符合重置之后的文件, 因此在常见情况下, 您不需要在

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

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

其他回答

我不清楚为什么有人还没说到fack_head呢。

git fetch origin master && git reset --hard FETCH_HEAD

如果您想把它放在别名中, 命令是:

git config --global alias.fpull '!git fetch origin master && git reset --hard FETCH_HEAD'

我认为答案是可怕的。但尽管刺绣猪的答案可能更好, 但我并不认为它是多么的优雅。 我发现这样做的方式是使用获取和合并 与定义的战略。 这样应该可以保存你的本地变化, 只要它们不是你试图强迫覆盖的文件之一。

首做您更改中的一次承诺

 git add *
 git commit -a -m "local file server commit message"

然后在发生冲突时获取更改并覆盖

 git fetch origin master
 git merge -s recursive -X theirs origin/master

- x 是一个选项名称, 而它们就是该选项的价值。 您选择使用它们的更改( 另一个选项是我们的更改) , 如果有冲突 。

您可以在您的工程基准文件夹中以文件忽略该文件 :

. jutignore( )

public/images/*

然后拉动修改,然后从您的 gitignore 文件中删除该行 。

不要使用 git 重置 -- hard. 来擦除他们可能完全不可取的更改。 相反 :

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

当然,你可以使用Git抓取而不是Git拉动, 因为显然它不会合并, 但如果你通常拉动它, 继续拉动这里是有道理的。

所以这里发生的情况是 git put 更新您的源/ 主管参考文件; git 重置更新您本地的分支引用与源/ 主管的引用相同, 无需更新任何文件, 所以您的检查状态没有变化; 然后按需要, git 检查退出将文件返回到您本地的分支索引状态 。 如果在现场和上游主控中添加了完全相同的文件, 索引已经符合重置之后的文件, 因此在常见情况下, 您不需要在

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

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

i 总结了其他答案。 您可以执行 Git 调用, 且不出错 :

git fetch --all
git reset --hard origin/master
git reset --hard HEAD
git clean -f -d
git pull

警告: 此脚本非常强大, 这样您就可以丢失更改 。