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

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


当前回答

而不是合并git pull,试试这个:

git fetch --all

随后是:

git reset --hard origin/master.

其他回答

这个解决方案总是在运行 。

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

重置索引和头部origin/master,但不要重置工作树:

git reset origin/master

似乎大多数答案都集中在master然而, 分支中, 有几次我在两个不同的地方 研究同一个功能分支, 我希望在一个分支中重设一个, 在另一个分支中反映出来, 而不是跳过很多圈子。

依据综合RNA 的答复Torrek对类似问题的答复我已经想出了一个非常成功的计划:

git fetch
git reset --hard @{u}

从一个分支运行它 它只会重新设置你的地方分支 到上游版本。

这可以恰当地用在别名中(git alits) (Git) 。git forcepull)以及:

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

或者,在你的.gitconfig文件 :

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

尽情享受吧!

我认为答案很可怕,但虽然赫奇猪的答案可能更好,但我不认为它能有那么优雅。fetchmerge使用定义的战略, 从而保存您本地的更改, 只要它们不是您试图强制覆盖的文件之一 。

首先对您的更改进行承诺

 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如果有冲突,则更改。

我有一个奇怪的情况, 无论是git cleangit reset工作。 我必须将冲突文件从git index在每个未跟踪的文件中使用以下脚本 :

git rm [file]

那样我就能好好拉了