“local_d”同时存在于“master”和“hipster”分支中???
没有。它不在 任何 分支中。它根本不在 存储库 中。
“但我可以看到它,它就在这里”,我听到你说。是的。事情是“就在这里”不在存储库中。 您可以查看和使用的文件不在 Git 中。
这可能是你应该知道的第一件事,在你开始使用 Git 之前。 Git 不存储文件: Git 存储提交。然后提交包含文件,但不是以普通的日常格式。存储在 Git 提交中的文件是一种特殊的、只读的、仅 Git 的、压缩的和去重的形式,除了 Git 可以读取它们,而且 没有任何东西——甚至 Git 本身也不能覆盖他们。这使得它们对完成工作毫无用处。 (这种不能直接使用版本控制文件的事情,很多版本控制系统都是如此:Git在这里并不是特别特别。)
这对您意味着,为了使用来自某个 Git 提交的文件,您首先需要 Git 复制这些文件,将它们从提交中提取出来,从它们的内部 Git-only 更改它们格式化为您可以查看和使用的文件。这些对完成工作很有用的普通日常文件不是提交中的文件。它们只是普通的日常文件。
已提交 文件安全地隐藏在提交中。 Git 与提交一起工作。 Git 还可以进行 new 提交,为此,您需要让 Git 复制您所做的任何更新。要将这些更新导入Git,您必须在这些文件上使用git add。1
this 对您的意义在于,无论您对 您的 工作区中复制出的有用文件做什么,这都不是 Git。将一堆文件复制到您的工作树中很好,但它不会将它们放入除了 您的 工作树之外的任何东西。 Git 不会将它们保存在任何地方,但也不会删除它们。它们是你的,而不是 Git 的。 Git 只是将它们留在那里。
当您运行 git checkout(或在 Git 2.23 及更高版本中,git switch)时, 您的工作区中有一些文件确实来自 Git .当您选择一些 other 提交到 git checkout 时,Git 会从您的工作区域中取出 那些 个文件 out,然后将em>other 提交。但是,只要所有 local_d/* 文件都不在 either 提交中,它们就会一直坐在那里。
一旦你使用git add 告诉 Git:这些文件应该进入我进行的下一次提交——这会将它们复制到我喜欢称为你提出的下一次提交的; 请注意,您实际上还没有进行此提交——现在Git 知道这些文件并将开始处理它们。但在那之前,Git 只是假设您制作了这些额外的东西,并希望在 Git 解决它时保留它。
1虽然有一些捷径,但我认为先学习它们并不是一个好主意,原因有很多,我不会在这里讨论。