为什么我可以从不同的分支机构进行更改而不是我上演的分支机构?

时间:2013-06-16 18:44:51

标签: git git-branch git-commit

我在分行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

1 个答案:

答案 0 :(得分:2)

当你创建一个git分支时,你没有创建一个新的分支。您实际上是在创建分支时创建分支。

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

如果你真的想要制作一个干净的分支,你应该检查你对“干净”分支的定义。通常掌握,然后从那里分支。这应该消除你在当地分支机构所做的任何改变。

如果你想要一个良好的直观视觉方式来理解HEAD以及掌握和分支的工作原理我强烈推荐本教程:http://pcottle.github.io/learnGitBranching/

如果你想要你甚至可以分叉并做出新的例子,但只是通过它会教你很多关于git的事。

如果您想更深入地了解git add以及为什么它与git commit不同,我建议您阅读git add找到的here

的手册页