合并将覆盖对以下文件的本地更改

时间:2015-10-27 19:12:14

标签: git

这里已经提出了类似的问题,但我相信这个问题没有。

我有一个文件params.dat,它为我的代码存储了一些参数值。

这个文件不断变化,因为我经常更改参数值,所以我将它的静态版本与其余的代码一起添加到我的repo中,然后用以下内容忽略它:

git update-index --assume-unchanged params.dat

一切正常,除非我必须对文件的静态版本进行一些更改(不会经常发生)。我所做的是,首先不要忽略它:

git update-index --no-assume-unchanged params.dat

然后进行必要的更改,提交并将它们推送到Github,最后再次忽略该文件。

这与我的主要回购工作完美无瑕,但当我从回购中尝试git pull时,我继续工作,我得到:

error: Your local changes to the following files would be overwritten by merge:
    params.dat
Please, commit your changes or stash them before you can merge.
Aborting

我按照here的说法尝试做:

git fetch --all
git reset --hard origin/master

但我明白了:

error: Entry 'params.dat' not uptodate. Cannot merge.
fatal: Could not reset index file to revision 'origin/master'.

我也尝试过:

git stash
git merge origin/master
git stash pop

here所述,但git stash之后我得到了:

No hay cambios locales que guardar

(大致翻译为“没有保存的本地更改”)

为了说明问题:我对保留在我工作的回购邮件上的params.dat文件上的任何更改不感兴趣。我只是希望它是我从家里推送到Github的任何内容的精确副本。

处理此问题的适当方法是什么?

2 个答案:

答案 0 :(得分:4)

"没有保存的本地更改"在这种情况下,git stash表示params.dat没有看到params.dat中的本地更改,因为它被假定为未更改。

在拉动之前,您必须使本地更改可见,并在$ git update-index --no-assume-unchanged params.dat $ git checkout -- params.dat $ git pull $ git update-index --assume-unchanged params.dat 文件中删除它们,如果有的话:

$ git update-index --no-assume-unchanged params.dat
$ git checkout -- params.dat
$ git stash
$ git pull
$ git stash pop
$ git update-index --assume-unchanged params.dat

如果您感兴趣的其他文件中没有提交本地更改,请使用存储来保留它们并在拉动后恢复:

Obj()

答案 1 :(得分:0)

我尝试了上述所有步骤,但对我而言无效。

上网几小时后,我发现您可以rename that file然后进行pullresetrebase

这将为您提取远程文件(重新创建重命名的文件)。

现在您可以删除renamed file,生活将会继续。