我现在在分店,我即将创建一个标签。创建一个标签会保存我所有分支的状态是否正确?但是后来如果我想回到这个标签,我该如何检查特定的分支?因为如果我签出一个包含所有分支的状态的标签,我该如何实际转到该标签内的特定分支?我不想用
创建一个新的分支git checkout -b branch_name tag_name
我希望稍后再回来查看此标签上的EXISTING分支。我想它会像
git checkout branch_name tag_name
但我无法在任何地方找到该命令的示例。
答案 0 :(得分:3)
在评论中已经注明了matt和Bauhaus,标记只是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存储在其他文件中。