当我在 git 中切换分支时,我使用 checkout
命令。经常会出现这样的情况,我想简单地返回并查看某个项目在某个提交时的状态。我一直在使用 git checkout <commit hash>
.这几乎总是让我处于 HEAD 分离的状态。
我想知道是否有人可以向我解释为什么我们可以在不分离头部的情况下 check out 分支,但不能在不分离 HEAD
的情况下以相同的方式 check out 特定的提交。指针?我犯了一个错误 git reset
查看旧提交,这当然会删除该提交之后的所有内容。
为什么 git checkout <commit hash>
拆开头部?如果这不是我要执行的操作的正确命令,那是什么?
最佳答案
HEAD
的主要目的之一是它成为您创建的任何新提交的父提交。通常,HEAD
引用采用两种形式之一 - 对分支提示的符号引用(例如 master
)或特定提交的哈希值。第一种是“正常”操作模式,新提交导致 1) 新提交的父级被设置为当前 HEAD
表示的哈希值,以及 2) 分支引用是正在移动以指向新提交的 HEAD
引用的当前目标。第二种情况称为“分离”,因为您的 HEAD
引用当前未附加到分支,而是附加到可能是也可能不是分支提示的特定提交。这不是问题,只是提醒你,因为如果你创建一个新的提交,你没有要更新的分支,你所做的任何新提交除了 HEAD
指向之外什么都没有在他们。如果你随后检查了一个不同的分支,没有任何东西指向新的提交,所以你冒着丢失它们的风险(仍然有 HEAD
reflog,所以即使那样你通常也可以恢复,虽然)。
所以,简短的回答是,不,如果不分离 HEAD
或创建新分支(但如果您只是想查看旧提交的内容,这没有意义,因为您最终会得到许多无用的分支,这些分支使您的命名空间变得杂乱无章。分离 HEAD
没有坏处,它是 git
中的一种正常工作方式。它只是在您执行诸如 git status
之类的操作时提醒您,以便您牢记自己正在进行的操作...
关于Git 检查提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868910/