6

我的.gitignore文件中有这个:

/nbproject/
/app/runtime/
/app/runtime/application.log*
/app/runtime/error.log*
/app/config/localdev.php*
.DS_Store

1)我已经结帐到master 分支,然后再次结帐,回到dev 分支

2) 一旦我回到dev 分支,我丢失了所有 /nbproject/ 文件和所有 /app/config/localdev.php !!!也许还有其他的,但由于它们是由 php 框架在运行时自动生成的,所以我真的说不出来!

3)然后我切换回主分支,我在那里得到了这些文件。

4)我已经将这些文件复制到其他地方,并且再次切换到dev 分支

5) 我已将那些丢失的文件放回 /nbproject/ 文件夹中。

现在,如果我尝试切换到 Master 分支,我会得到:

Error: The following untracked working tree files would be overwritten by checkout:     
    nbproject/private/config.properties      
    nbproject/private/private.properties     
    nbproject/private/private.xml    
    nbproject/project.properties     
    nbproject/project.xml 

    Please move or remove them before you can switch branches.  

    Aborting

我知道我可能应该做一个git add .移动存储库中的这些文件,我不明白的是:

如果在发出这些 git checkout 命令之前我已经忽略了 nbproject/ ,为什么 git 会抛出此消息?

问题:

关键是忽略这些文件。在 master 和 dev 上。我的问题是:我该如何解决这个问题,以便:

a) 首先: 将这些文件(gitignore 上的文件)返回给 dev ?

b) 第二: 采取措施再次避免这种冲突。

4

3 回答 3

8

您可以在另一个分支中跟踪它们。或者,您可以添加--force到 checkout 命令以使用 master 拥有的文件来删除文件。或者,您可以git clean -xdf在签出 master 之前从工作目录中删除文件。

于 2012-08-31T20:24:42.353 回答
3

为解决问题而采取的步骤。致谢:jszakmeister

1)我已将项目克隆到其他地方。

2)我在那个克隆上结帐大师。

3)将 gitignore 放入 master 中,因为它应该从一开始就在那里: git show dev:.gitignore > .gitignore

4)我已经通过执行 git rm "all files that where on gitignore one one" 从树中删除了文件

5)我已将 .gitignore 文件添加到存储库中。

6)提交

7)切换回原来的回购并做了:

8) git fetch /path/to/fix-project master:master

9) git checkout master,我得到: 切换到分支'master' 你的分支领先于'hub/master' 1 次提交。这是我的远程主分支。

10)推送到远程主机。

11)再次结帐开发

于 2012-09-03T11:53:23.993 回答
0

如果您遇到如下情况

您已将子分支合并到主分支中。然后您尝试在 master 分支中提取更改。现在,当您尝试将分支从子分支切换到主分支时,您会遇到上述问题,即“请先移动或删除它们,然后才能切换分支。

第 1 步:备份所有列出的文件(以防您的操作系统无法恢复)。

第 2 步:删除导致错误的文件。

STEP 3:切换分支(现在不会抛出错误)

第 4 步:恢复已删除的文件。

快乐编码 ;)

于 2021-03-24T11:21:14.923 回答