之前在另一台电脑上对其本地仓库进行了补充添加并提交到了远程仓库中(可理解为另一位同事对远程仓库进行了补充),今天在拉取其添加内容到本地仓库时,发生以下报错。
图片抽抽传不上来,大概就是以下内容:
Untracked Files Prevent Merge # 未追踪的文件阻止了merge
Move or commit them before merge # 移除或者提交他们在merge之前,这里没办法提交,原因在下
Can't update # 无法更新
master has no tracked branch # 主分支有未追踪的分支
问题
查了一些资料,发现是以下问题:我之前这台电脑push项目时手动将一个文件vcs.xml untracked了(并没有加入到.gitignore中,而在另一台上push时没有手动将这个文件忽略,而是将其传到了远程仓库。导致我在这台电脑上pull时报错有untracked的文件。注意此时我无法把本地仓库(加入了vcs.xml)push然后再pull,因为我本地分支的head在remote的头指针之前(即远端仓库内容比本地分支新)。
解决方法
我的解决方法是:先在远程仓库中删除了这个文件(相当于同事或者另一台电脑删除这个文件),这里同时涉及了另一个问题,即删除远程仓库的同时是否删除本地仓库(同事或另一台电脑)的该文件。我们通过以下的方法二来只删除远程仓库中的文件。
方法一:在git中可以用git rm命令删除文件(删除远程仓库文件)
git clone 仓库地址
git add .
step1: git rm 文件 //本地中该文件会被删除
step2: git rm -r 文件夹 //删除文件夹
step3: git commit -m '删除某个文件'
step4: git push (origin master)
上面的方法会把对应的本地文件也删除掉,如果不想把本地文件删除,只把缓存区中的对应部分删除,则加上–cached
方法二:
git clone 仓库地址
git add .
step1: git rm --cached 文件 //本地中该文件不会被删除
step2: git rm -r --cached 文件夹 //删除文件夹
step3: git commit -m '删除某个文件'
之后我们就可以在这台电脑上进行pull(fetch + merge)了。