如果我们签出提交名称而不是分支名称会怎样?
答案 0 :(得分:2)
我不同意那些说“他们是相同的”或“没有坏事”的评论。
它们在一个重要方面明显不同。 antak在一篇文章中正确地描述了它,但我想强调潜在的危险,即你可能会忘记新的提交。
如果通过分支签出,则分支指针将指向提交,下次提交时,将添加新提交,并且分支指针将随之移动。这通常是人们想要发生的事情。
如果您只是通过提交签出,然后进行新提交,那么您没有指向该新提交的分支。只有HEAD指向它。
如果您此时要结帐其他分支,您可能会忘记新的提交。 (如果你不知道像ref-log这样的特殊事情,你就会忘记它。)
正如antak指出的那样,你可以进行新的提交,然后在那时创建一个分支,但是如果你不知道原始问题的答案那么你可能不知道该怎么做,对吧?
Nutshell:除非你有特殊的理由不这样做,否则你通常想要结帐。
答案 1 :(得分:1)
简而言之,一切都不会发生。签出branch
更容易,让您及时了解最新信息(即最新commit
)。通过commit
签出可能 <或em> 将您置于分支机构的最新状态之后。
git checkout <branch>
将在其最新提交时签出<branch>
,即HEAD
将指向该分支的最后一次提交。
git checkout <commit>
有点不同。如果签出<commit>
,您可能会指向最新的提交,因此您将与HEAD
同步。 但是你也可以checkout
以前的提交,这会让你处于detached HEAD
状态,即HEAD
指向你的git历史记录中的不同提交(最有可能是最新的)。您也可以重置HEAD
,以指向您已签出的当前提交。
您通常应该<branch>
结帐,因为您始终知道您拥有最新版本的分支(除非有上游更改,否则您应该git pull
)。
Here是git checkout
的文档,如果您想了解更多信息。
答案 2 :(得分:1)
checkout <commit>
和checkout <branch>
都是相同的,因为它们会对工作树中的文件和目录进行必要的更改,以使其最终看起来与提交记录的文件状态相同由<commit>
或<branch>
参数指定。
除此之外,后者(<branch>
)还设置您指定为活动分支的任何分支。通过这样做,它完成了&#34;在分支上的概念&#34;。
分支只是一个赋予提交的可移动标签,它会自动移动到您提交的任何新提交。这些标签使提交更易于管理和记忆。
checkout <commit>
可能会让您进入detached state。在这种状态下,您无法获得自定义标签。但是您可以创建提交并在之后的该位置创建新分支。除了未被分支(或标签)标记的提交最终将在garbage collected之后获得{{3}}之外,无论是否处于独立状态的工作都是个人偏好和/或方便的问题。
答案 3 :(得分:0)
简单地git checkout branch_name将带您进入该分支的最新提交,因为您将提交其名称提交到提交。