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