Git结帐标记处的现有分支

时间:2014-03-28 20:01:28

标签: git version-control github

我现在在分店,我即将创建一个标签。创建一个标签会保存我所有分支的状态是否正确?但是后来如果我想回到这个标签,我该如何检查特定的分支?因为如果我签出一个包含所有分支的状态的标签,我该如何实际转到该标签内的特定分支?我不想用

创建一个新的分支
git checkout -b branch_name tag_name

我希望稍后再回来查看此标签上的EXISTING分支。我想它会像

git checkout branch_name tag_name

但我无法在任何地方找到该命令的示例。

1 个答案:

答案 0 :(得分:3)

在评论中已经注明了mattBauhaus,标记只是SHA-1的名称。

但事实上,分支也是如此!

当你这样做时:

git checkout <sha-1>

git带你&#34; off&#34;分支和特定提交。 Git称这是一个&#34;分离的HEAD&#34;。

如果您通过其他方法命名提交SHA-1,例如标记或&#34;远程分支&#34; (origin/master之类的),git做同样的事情。

当你这样做时:

git checkout branch_name

只有一个区别,但它是一个非常重要的区别:git仍然可以检查出SHA-1,就像使用任何其他方法一样,但它也会让你&#34; on&#34;分支。

这真正意味着git将分支的名称写入文件。 1 那是什么&#34;在分支上#&#34; 34;表示:该文件包含您所在分支的名称。

在一个分支上&#34;&#34;主要影响 new 提交。无论你做了什么新的提交,git都会将提交写入存储库,以及commit-message,author,timestamp,parent commit等。然后,如果你是&#34;在分支&#34;上,git将新的commit-ID写入一个跟踪该分支尖端的文件。 2 这会导致分支本身指向新提交。让我们说,例如,新提交具有SHA-1 ID c0ffee...。 Git将c0ffee...写入分支文件。

假设你然后git checkout master并在分支主人&#34;上获得&#34;。 Git在分支master上切换到其他一些提交。之后,您希望返回并在分支branch_name上开展更多工作,以便再次git checkout branch_name。 Git每次都做同样的事情:它看到这是一个分支名称,查找branch_name的SHA-1,检查提交c0ffee...,然后 - 因为它是一个分支名称-updates&#34;我在哪个分支&#34;文件。

如果您现在进行另一个新提交,git会像往常一样写入提交,并将ID-let称为恰好是SHA-1 feedcab... - 写入像往常一样分支文件。所以你仍然在分支branch_name&#34;上,但现在这意味着&#34;提交feedcab...&#34;。

标签和分支之间的关键区别在于标签不会移动,git不会使用新的SHA-1 ID更新它;但是分支 预计会移动,git会自动更新它。


1 文件为.git/HEAD,之后包含字符串ref: refs/heads/branch_name

2 具体而言,在这种情况下为.git/refs/heads/branch_name。但是,git也有&#34;打包&#34; refs存储在其他文件中。