git checkout commit-name和git checkout branchname有何区别

问题描述:

如果我们签出一个提交名称而不是分支名称,会发生什么?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,然后在那个时候创建​​一个分支,但是如果您不知道原始问题的答案,那么您可能不知道该怎么做,对?

坚果壳:你通常要检查分支,除非你有特殊的理由否则。