Git checkout 正在将文件从 feature 分支移动到 dev 分支

Git checkout is moving file from feature branch to dev branch

我已阅读官方 git 结帐文档和此处的一些问题,但没有找到我所看到的行为的答案。

在本地,我有一个开发分支。在 dev 分支中,我创建了一个新的功能分支

git checkout -b myBranch

然后,我添加一个新文件

echo foo > myFile.txt

如果我马上回到dev分支

git checkout dev

myFile.txt 已经存在,尽管

1) 我没有暂存文件 2)我还没有合并分支

我的期望是我在功能分支中对文件所做的任何更改都不会传播到其他分支。

为什么会这样?

发生这种情况是因为您在新分支上创建了新文件,但您没有跟踪它。因此,新文件不仅存在于新分支上,而且属于工作目录而不属于任何特定分支。

是正确的(并且被赞成),但值得强调的是您的 work-tree——您查看和使用文件的地方—— 不是 b运行ch。这不是提交,也不会被保留!它只是您 工作的地方 .

永久保留,或者只要提交本身存在,总之,就是您创建的完整快照当您进行 new 提交时。但是这个快照根本不是您的 work-tree 的副本!相反,它是您放入 Git 的 index.

中的内容的快照

索引——也称为暂存区或有时缓存——是一件复杂的事情,但它是,我想想,最好的想法是:Git 将放入你所做的 下一个 提交的所有文件,当你提交时。 它开始是您 运行 git 签出 <em>name</em>[ 时签出的提交中保存的所有文件的副本=56=].</p> <p>如果您在工作树中创建了一个新文件,或者在您修改了一个现有文件之后,<em>索引</em>没有任何变化。它仍然是 <em>commit</em> 中内容的副本。 运行 <code>git add 告诉 Git 将文件从工作树复制到索引中,使其准备好进入 next 提交。在那之前,它只是工作树中的一个文件:一个 untracked 文件,如果索引中没有它的副本的话。

另请参阅 the answer that phd linked-to in on the question Modified files in a git branch are spilling over into another branch(我们已将其用作此问题的终结者的副本)。请注意,使新文件被跟踪(通过 git add-ing 新文件)是不够的:您还必须 运行 git commit 进行包含永久冻结的新提交文件的副本(当然还有所有其他文件)。在那之前,它只是一个未跟踪或跟踪的文件,但不在任何提交中。