Git 检查提交

标签 git

当我在 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/

相关文章:

ruby-on-rails - Gitorious Rots Ruby on Rails 错误

git - 如何解决 Git "CONFLICT (modify/delete)"?

git - 如何处理二进制文件的 gitting,例如.mo 文件

Git忽略所有缩小的后缀文件

Git 在代码中显示 head,而不是我的更改

git - 使用 `git show` 创建和应用跨越多个提交的补丁

git - 在 SourceTree 中将提交消息主题保持在 50 个字符以下

git - 如何使用 Git 进行子模块稀疏 check out ?

git - 如何在 Visual Studio 中打开另一个 GIT 分支而不需要提交对当前分支的更改?

git - 了解 .gitignore