矛盾的Git消息:合并和删除

时间:2015-03-07 17:16:17

标签: git branch cloud9-ide

使用Cloud9并遇到问题,因为.c9文件夹已添加到git中。试图删除它。在我可以合并到主分支之前,Git要求我删除文件。当我尝试删除它时,git告诉我该文件不存在。

erikvdw@blog:~/workspace (master) $ git merge Post_initial_setup
error: The following untracked working tree files would be overwritten by merge:
        .c9/metadata/workspace/.gitignore
Please move or remove them before you can merge.
Aborting
erikvdw@blog:~/workspace (master) $ git rm .c9/metadata/.gitignore --cache
fatal: pathspec '.c9/metadata/.gitignore' did not match any files

3 个答案:

答案 0 :(得分:0)

过去我试图解决这个问题:

error: The following untracked working tree files would be overwritten by merge:
index.php
Please move or remove them before you can merge.

我被告知发生这种情况的最常见原因是因为您进行了本地修改,这使得合并无法实现。

我已经读过其中一个解决方案是重置回头:

git reset --hard HEAD

再拉一次:

git pull

您还可以考虑先提交或存储您自己的更改。

查看Git pull - error: The following untracked working tree files would be overwritten by merge:可能会有所帮助,它给了我一个很好的基本想法。

答案 1 :(得分:0)

TL; DR回答:在你决定在这种情况下“正确”的含义之前,你无法正确解决这个问题。

我不清楚你是否想要这个.c9子目录 - 或者更确切地说,它的部分或全部文件 - 是否受版本控制:

  

因为.c9文件夹已添加到git。

(“它已被添加”,但不是 任何人,它只是神秘地出现!:-)显然有人或某事添加并承诺;谁和为什么?)同时:

  

.c9/metadata/workspace/.gitignore

这个文件的存在表明你希望这里的文件至少有一些,但可能不是全部, 1 是版本控制的。

通常情况下,如果你想要那个,你希望相应的.gitignore文件也受版本控制,即它应该是“跟踪文件”,而不是“未跟踪文件”。这样,克隆此存储库的每个人都将获得正确的.gitignore文件,以避免版本控制特定文件。

(请记住,我对这个Cloud9 IDE一无所知,所以我无法判断.c9中版本控制内容是好还是坏。)

如果您 想要部分或全部.c9跟踪和版本控制,包括.c9/metadata/workspace/.gitignore,那么您只需要添加并提交此文件(也许还有一些)在合并其他人的分支之前,您自己的分支中的所有其他.c9文件),其中他们还添加并提交了.gitignore文件(可能还有其他部分或全部.c9文件)。

如果希望跟踪和版本控制,则需要:

  1. 找出别人(另一个分支)的原因:是故意还是错误?
  2. 决定你应对的策略:让他们修理它,或者自己修理它?
  3. 然后根据步骤(2)的结果采取措施。


    1 “可能”这个词在这里,因为通常的做法是在目录中提交一个空的.gitignore文件,以强制git创建目录。一个空的.gitignore文件告诉git,当git去抱怨需要添加的未跟踪文件时,它应该抱怨的文件列表 - 即应该忽略 - 是空的

    换句话说:“请注意未跟踪的文件,除了这个空的名单列表”=> “请抱怨所有未跟踪文件”。在这种情况下,.gitignore的存在是red herring:它被用作虚拟空文件,仅用于创建目录的副作用。

答案 2 :(得分:0)

由于您希望忽略整个.c9文件夹,因此将.gitignore文件保留在其中是没有意义的。只需在workspace / repo根文件夹中更新/创建.gitignore文件,并添加一行以忽略.c9文件夹。 (我假设你已经完成了,因为git说您的.c9 / metadata / .gitignore文件未被跟踪)。

错误正在发生,因为您已经提交了.c9文件夹,里面有.gitignore文件。现在由于更新的全局.gitignore文件,当前.c9/metadata/.gitignore未跟踪,但之前已跟踪。既然你不再想要保留它,我认为可以安全地删除.c9/metadata/.gitignore文件,而不仅仅是从git(现在它不存在,因此它不存在,因此错误),但是从文件系统,所以rm .c9/metadata/.gitignore。 (或者你可能想将它移动到git repo之外的另一个文件夹)。对要取消跟踪的其他文件重复类似的步骤。

希望这有帮助。