这个问题的变化已经被问及并得到了回答,但是当我通过Chacon书的方式工作时,我仍然感到困惑。
我从github克隆了我的测试库。 我在这个名为afile.txt的文件中创建了一个我暂存和提交的文件 我在这个名为asecondfile.txt的第二个文件中创建了一个我不会暂存或提交的文件
现在我执行
$ git checkout -b testing
Switched to a new branch 'testing'
当我列出文件时,我只看到asecondfile.txt。
我对此文件进行了更改,不要暂存或提交并执行
$ git checkout master
如果我cat asecondfile.txt,我可以看到我在测试分支中所做的更改。
$ git checkout testing
我暂停并将更改提交到asecondfile.txt。
$ git checkout master
我列出的文件没有看到aseconfile.txt。
对这种行为感到非常困惑,并且很乐意作出解释。
答案 0 :(得分:2)
当文件既没有暂存也没有提交时,git对此一无所知。这样的路径被称为“未跟踪”。 Git独自留下这些,但是当你跑git status
时,他们抱怨他们“没有跟踪”。 (你可以闭嘴,但在你到达.gitignore
之前忽略它。)
一旦文件上演,它就不再“未跟踪”了。它现在是一个跟踪文件(并将其添加到.gitignore
将无济于事,它已被跟踪)。现在它已被跟踪,git知道删除它从具有它的提交(例如您在testing
上提交的提交)切换到不提交的提交。
这就是你所看到的:git checkout master
删除了文件,因为当你在分支testing
时它被提交(因此也在index / staging-area中),并且提交是分支master
的提示不具有该文件。
一旦git删除了它(通过切换到master
),该路径就不再是暂存或提交的,所以如果你在切换到{之后创建一个新的asecondfile.txt
{1}},这是一个“未跟踪”的文件。如果你然后问git master
它应该在默认情况下抱怨并失败:它必须删除你未跟踪的文件,以便用跟踪文件(可能是)不同的内容替换它。