我如何强制在 git pull 上覆盖本地文件 ? 我的本地仓库包含一个与服务器相同的文件名文件 。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
我如何强制在 git pull 上覆盖本地文件 ? 我的本地仓库包含一个与服务器相同的文件名文件 。
错误: 未跟踪的工作树文件“ example. txt ” 会被合并覆盖
当前回答
我也有同样的问题,而且出于某种原因, 即使一个干净的Git -f -d也不会这样做。这就是为什么:由于某种原因,如果你的文件被Git忽略(通过.gitignore 项,我假设),它仍然费心于在稍后的拉动中覆盖这个文件,但清洁不会去除它,除非你加上 -x。
其他回答
如果您不总是想要粘贴分支名称, 或者您想要在脚本中自动显示此分支名称, 这里是一个通用的解决方案 。
git fetch
git reset --keep origin/$(git rev-parse --abbrev-ref HEAD)
如果您也想重置本地更改 :
git fetch
git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)
您也可以使用此命令添加一个弹片别名 :
alias gplf='git fetch && echo "HEAD was at $(git rev-parse --short HEAD)" && git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)'
警告,如果您在 gitignore 文件中有任何目录/ * 条目, 这样做将会永久删除您的文件 。
@lauri在 @lauri 遭遇时, 听从David avsajanishvili的建议,
而不是 (git> v1.7.6):
git stash --include-untracked
git pull
稍后您可以清理藏匿历史。
手动,一个一个一个:
$ git stash list
stash@{0}: WIP on <branch>: ...
stash@{1}: WIP on <branch>: ...
$ git stash drop stash@{0}
$ git stash drop stash@{1}
残忍地, 一次一次地:
$ git stash clear
当然,如果你想回到你藏的东西:
$ git stash list
...
$ git stash apply stash@{5}
我认为答案是可怕的。但尽管刺绣猪的答案可能更好, 但我并不认为它是多么的优雅。 我发现这样做的方式是使用获取和合并 与定义的战略。 这样应该可以保存你的本地变化, 只要它们不是你试图强迫覆盖的文件之一。
首做您更改中的一次承诺
git add *
git commit -a -m "local file server commit message"
然后在发生冲突时获取更改并覆盖
git fetch origin master
git merge -s recursive -X theirs origin/master
- x 是一个选项名称, 而它们就是该选项的价值。 您选择使用它们的更改( 另一个选项是我们的更改) , 如果有冲突 。
看起来最好的办法是首先做到:
git clean
以删除所有未跟踪的文件,然后继续使用通常的 Git 调用...
只是做做
git fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname
来避免所有不想要的副作用,例如删除您想要保存的文件或目录等。