我在分支上有两个标签。每当我执行git reset old_tag
时,它会将头部更改为old_tag
,并表示我已经落后于1次提交(这是预期的)。但是,git checkout old_tag
给了一个独立的头。
据我了解,git reset
只更改头部指针。对于git checkout
,我总是使用它来切换分支或签出新分支中的某个提交。但我从来没有使用它来检查一个提交所有自己没有分支。 所以,如果它总是给出一个独立的头,为什么它首先允许自己检查一个提交?
更新:粗体部分是我的问题和推荐的重复问题之间的区别。
答案 0 :(得分:0)
来源于documentation:
git-checkout - 切换分支或恢复工作树文件。或者完美描述为:
更新工作树中的文件以匹配索引中的版本或 指定的树。如果没有给出路径,git checkout也会更新HEAD以将指定的分支设置为当前分支。
git-reset - 将当前HEAD重置为指定状态
答案 1 :(得分:0)
根据评论中的讨论,已达成以下内容:
git-reset
:
将头部更改为不同的提交/标签...如果您当前正在重置头部:
分离状态。
但git reset不会让你进入分离状态。
git-checkout
:
最后一次使用是关于我的问题。有时,您不希望重置当前分支以尝试旧提交。但是进入具有特定提交的分离状态并使用该旧状态。只有get checkout
会让您进入该状态,这不能通过git reset
实现,因为它只会重置分支(或者如果处于分离状态也可以重置)但不会让您处于分离状态。
答案 2 :(得分:0)
一个独立的头部情况并不常见。但是,确保您不会提交任何内容可能会很有趣。
您无法使用git-reset
获得分离的情况,因为它的作用是移动您当前的分支(可能是您的舞台区域和工作目录,具体取决于您使用的选项)。
git-reset
不仅仅是移动HEAD。它会移动您指定的branch
,HEAD
和Staged Area
。
您只移动分支和HEAD:
git reset --soft tag/SHA1/branch2
您将分支,HEAD和Stage Area移动到:
git reset --mixed tag/SHA1/branch2 //It is the default option
使用以下命令移动分支,HEAD,Stage Area和Working目录:
git reset --hard tag/SHA1/branch2