无法切换分支 - "错误:未跟踪的工作树文件...",我是否需要执行git add命令?

7

我的.gitignore文件中有以下内容:

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

1) 我已经切换到主分支,然后再次切换回开发分支

2) 当我回到开发分支时,我失去了所有/nbproject/文件和所有/app/config/localdev.php文件!也许还有其他文件,但由于它们是在PHP框架运行时自动生成的,所以我无法确定!

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

4) 我将这些文件复制到其他地方,然后再次切换到开发分支

5) 我将这些缺失的文件放回/nbproject/文件夹中。

现在,如果我尝试切换到主分支,我会得到以下提示:

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会抛出这个消息?

问题:

关键是要忽略这些文件。无论是在主分支还是开发分支上都是如此。我的问题是:我该如何修复这个问题,以便:

a) 首先:将这些被gitignore的文件恢复到开发分支中?

b) 其次:采取措施避免再次出现这种冲突。


2
问题在于master分支明显正在跟踪这些文件,而不是忽略它们,而dev分支正在忽略它们并且不跟踪它们。最好的做法取决于哪种模式是您项目的“正确”模式 - 要么跟踪这些文件,要么忽略它们。在不同的分支上尝试同时执行这两个操作会导致此类问题。 - twalberg
3个回答

9

你可以在另一个分支中追踪它们。或者,在检出命令中添加 --force,以将文件与主分支同步。或者,在检出主分支之前使用 git clean -xdf 命令清理工作目录中的文件。


1
那些被gitignore的文件在我的开发分支上消失了。我需要把它们从主分支恢复到开发分支上。但我无法切换到主分支。因此,为了只将gitignore中的文件恢复到开发分支上,应该键入什么命令呢? - MEM
1
我不明白“zap the file”是什么意思,所以我无法理解你的回答。请注意,我已经更新了我的问题。你能否澄清一下你的回答? - MEM
2
git clean -xdf 可能会删除您想要的文件。请尝试使用 git clean -fdxn 先检查将要被删除的内容。 - sfotiadis
“--force” 参数如何影响目标分支中未提交的与当前分支无冲突的更改? - Zahra
TG 代表 --force 选项 - 在遇到这个错误之前,我不得不遍历2个SO页面中的每一个答案才能克服它。谢谢!只是希望 Git 更加用户友好,并在失败时显示此选项。在完全不必要的 jar 文件上浪费了2个小时,真是可笑至极。 - killjoy

4

解决问题的步骤。 感谢:jszakmeister

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

2) 在那个克隆版本上检出了主分支。

3) 将gitignore文件放置在主分支中,因为它一开始就应该在那里:git show dev:.gitignore > .gitignore

4) 通过执行“git rm”命令逐个删除树中的文件,这些文件都在gitignore中。

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

6) 提交更改。

7) 切换回原始存储库并执行以下操作:

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

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

10) 推送到远程主分支。

11) 再次检出dev分支。


2
如果您遇到以下情况:
您已经将子分支合并到主分支中。然后,您尝试在主分支中拉取更改。 现在,当您尝试从子分支切换到主分支时,会出现上述问题,即“在切换分支之前,请移动或删除它们。””
步骤1:备份所有列出的文件(以防在您的操作系统中无法还原)。
步骤2:删除导致错误的文件。
步骤3:切换分支(现在不会抛出错误)。
步骤4:恢复已删除的文件。
愉快编程 ;)

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