2011-10-03 82 views
4

试图从git repo中获取,但获取以下输出。我认为这些文件被跟踪(如他们应该),但它表明它们不是。他们不在.gitignore。我大约有5-10分支落后。由于(据说)未跟踪文件导致文件覆盖的Git警告

git pull --rebase origin master 
From github.com:user/Project 
* branch   master  -> FETCH_HEAD 
First, rewinding head to replay your work on top of it... 
error: The following untracked working tree files would be overwritten by checkout: 
mountdoom/protected/models/UserHelper.php 
mountdoom/protected/models/UserRegistrationForm.php 
mountdoom/protected/runtime/state.bin 
mountdoom/protected/views/site/register.php 
Please move or remove them before you can switch branches. 
Aborting 
could not detach HEAD 

任何想法如何解决这个问题?

回答

4

它们在您检出的版本中进行跟踪,但未在之前检出的版本中跟踪。如果你不关心未跟踪的版本,只需删除它们。

如果你确实关心他们,在进行rebase之前提交他们。您可能必须合并为rebase进程的一部分。

+0

git merge没有'-f'选项 –

+1

@Jamie,true。 git pull的确如此,但你说得对,它不适用(似乎只适用于获取部分)。 –

3

您可以将未跟踪文件添加到索引(git add),git stash他们,然后做你的git pull --rebase然后git stash pop和解决冲突(如有)。

1

如果你只是想和我一样来删除这些文件,你可以运行

rm `git merge 2>&1 | sed "s/^[^\t].*/ /g" ` 

(你可能要与回声,而不是RM先运行它来验证结果)

+0

**用法:rm [-f | -i] [-dPRrvW]文件... 取消链接文件** –

1

所以似乎这个问题的一个场景是当一个文件已被删除,你仍然有一个副本。出于某种原因,git无法理解它。

这些建议都不适合我。

最后,我可以通过git rm filenamegit commit -m "temporary commit",然后git pull --rebase修复它。

此时,git再次抱怨,然后我不得不添加要跟踪的文件git add filename,git commit -m "temporary commit2",然后git pull --rebase

然后一切进展顺利。我没有看到我的临时提交,因为他们相互抵消。

+0

在某些情况下,甚至不需要第一部分。我所需要做的就是:'git add filename','git commit -m'临时commit2'',然后'git pull --rebase'。 – BeC