Git发出警告,因为(据说)有未跟踪的文件导致文件被覆盖。

5

尝试从git仓库拉取,但是得到以下输出。我认为这些文件被跟踪(应该是这样的),但它指示它们没有被跟踪。它们不在.gitignore中。我距离分支大约有5-10次提交。

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个回答

6

这些文件在你检出的新版本中被跟踪,但是在之前检出的版本中却没有。如果你不关心这些未被跟踪的版本,只需将它们删除即可。

如果你关心这些文件,可以在进行变基操作之前提交它们。然后可能需要在变基过程中合并它们。


git merge 没有 '-f' 选项。 - Jamie Pate
1
@Jamie,没错。git pull会做到这一点,但你说得对,它并不适用于这种情况(似乎只适用于fetch部分)。 - Matthew Flaschen

4

您可以将未跟踪的文件添加到索引(git add),git stash它们,然后执行git pull --rebase,然后git stash pop并解决任何冲突。


1
如果您只想像我一样删除文件,可以运行以下命令:
rm `git merge 2>&1 | sed "s/^[^\t].*/ /g" `

(您可能想先使用echo而不是rm来验证结果)

用法:rm [-f | -i] [-dPRrvW] 文件... unlink 文件 - IgorGanapolsky

1
所以,这个问题的一种情况是当一个文件被删除但你还有它的副本。由于某些原因,git 无法理解它。
这些建议对我都没有用。
最终,我通过 git rm 文件名git commit -m "临时提交",然后 git pull --rebase 来解决它。
此时,git 再次报错,然后我不得不使用 git add 文件名 将该文件加入跟踪,再次执行 git commit -m "临时提交2",然后 git pull --rebase
然后一切都顺利了。我看不到我的临时提交,因为它们互相抵消了。

在某些情况下,第一部分甚至都不需要。你所需要做的就是:'git add 文件名','git commit -m "临时提交2"',然后 'git pull --rebase'。 - DrB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接