git checkout commit-name和git checkout branchname有何区别
总之,没什么大不了的事情。检查出branch
会更容易,并让您保持最新状态(即最新的commit
)。检查出commit
可能或可能不是把你置于分支的最新状态。
git checkout <branch>
将在其最新提交时结账<branch>
,即HEAD
将指向该分支的最后提交。
git checkout <commit>
是有点不同。如果检出<commit>
,您可能会指向最新的提交,因此您将与HEAD
同步。 但你也可以checkout
先前的承诺,以及,这将使你在一个detached HEAD
状态,即HEAD
指向不同的使用Git的历史承诺(最有可能是最新的)。您也可以重置HEAD
,以指向您已签出的当前提交。
您通常应该通过<branch>
结帐,因为您将始终知道您拥有该分支的最新版本(除非存在上游更改,那么您应该使用git pull
)。
Here是文档git checkout
如果您想了解更多信息。
两个checkout <commit>
和checkout <branch>
是在同他们将为文件和目录进行必要的更改在您的工作树,使其最终看起来一样被提交由<commit>
或<branch>
参数指定的记录文件的状态。
除此之外,后者(<branch>
)还设置您指定为活跃的分支任何分支。通过这样做,它完成了“在一个分支上”的概念。
分支只是一个可移动的标签,可以自动移动到任何您提交的更新提交提交。这些标签使提交更易于管理和记忆。
checkout <commit>
可以把你detached state。在这种状态下,你不会得到你的自定义标签。但是您可以创建提交并在此后在该位置创建一个新分支。除了分支(或标签)没有标记的事实以外,最终会在多天后得到garbage collected,无论是否在分离状态下工作都是个人偏好和/或便利性的问题。
简单的git结帐branch_name带你到最新的提交分支哪来的为带你到一个提交你提到它的名字。
我不同意上面说的话,比如“他们是一样的”或者“没什么不好的事情会发生”。
它们在一个重要的方面明显不同。 antak在上面的帖子中正确地描述了它,但我想强调潜在的危险,那就是你可能会失去对新提交的追踪。
如果您通过分支签出,那么分支指针将指向提交,并且在您下次提交时,将添加新的提交,并且分支指针将随之一起移动。这通常是人们想要发生的事情。
如果你只是通过提交签出,然后进行新的提交,那么你没有指向新提交的分支。只有HEAD指向它。
如果您此时要签出其他分支,则可能会失去对该新提交的跟踪。 (如果你不知道像ref-log这样的特殊事情,你会失去它的踪迹)。
正如antak指出的那样,您可以创建新的commmit,然后在那个时候创建一个分支,但是如果您不知道原始问题的答案,那么您可能不知道该怎么做,对?
坚果壳:你通常要检查分支,除非你有特殊的理由否则。