这里已经提出了类似的问题,但我相信这个问题没有。
我有一个文件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的任何内容的精确副本。
处理此问题的适当方法是什么?
答案 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
然后进行pull
或reset
或rebase
。
这将为您提取远程文件(重新创建重命名的文件)。
现在您可以删除renamed file
,生活将会继续。