0

我在分支上master。我创建一个新文件,例如Util.java. 这是未跟踪的。所以我这样做git add Util.java了,文件在暂存区准备好提交。
然后我这样git checkout -b temp做我切换到temp分支。
git status我看到有文件Util.java暂存并准备好提交。我没想到会这样,因为我假设一旦我切换分支,一切都是干净的。
我这样做git commit Util.java了,文件已提交,git log图表显示它Util.javatemp. 即它遵循另一个“时间线”而不是master.
为什么会这样?Util.java因为我在不同的分支上创建了它,所以我期望不会提交

4

1 回答 1

2

当你创建一个 git 分支时,你并没有创建一个新的分支。当您创建它时,您实际上是从您所在的任何一个分支创建一个分支。

澄清一下:有一个指向当前版本的指针,称为 HEAD。您的负责人将指定您创建的任何新分支的基础。在这个特定的例子中,由于你在你的分支上添加了一个文件,你的 HEAD 指向你当前的分支。当您创建一个新分支时,您当前的文件状态将用作基础,即使您的本地更改尚未反映在 git 版本控制中。

如果您真的想创建一个干净的分支,您应该检查您对“干净”分支的定义。通常是master,然后从那里分支。这应该会消除您在本地分支上所做的任何更改。

如果您想要一种直观的直观方式来了解 HEAD 和 master 以及分支如何工作,我强烈推荐本教程: http: //pcottle.github.io/learnGitBranching/

如果你愿意,你甚至可以 fork 它并制作新的例子,但只是通过它会教你很多关于 git 的知识。

git add如果您想更深入地了解 git add 以及它与 git commit 的不同之处,我建议您阅读此处的手册页

于 2013-06-16T18:47:14.360 回答