如果我不知道提交的哈希,git会继续前进

时间:2015-03-04 19:13:22

标签: git

我在使用git时遇到了一些麻烦。我在本地和服务器上有一个分支。我在本地电脑上做了一些重要的提交,然后从服务器分支拉出来。这个动作使我恢复到原来的版本。而且我不知道如何再前进。 git log只显示当前头部和以前的版本。我可以将头转向我最新的提交吗?

1 个答案:

答案 0 :(得分:2)

您的仓库的HEAD是一个特殊的引用,指向您的工作目录现在的提交。 A'分离的HEAD'意味着HEAD没有指向分支的顶部,而是指向过去的某个提交。这对于查看过去的代码很好,但您不想承诺这一点。在提交之前,你想要在分支的顶端,而不是在中间的某个地方。

您的所有提交都不应该被删除。您应该能够通过运行

来查看所有提交
git log --graph --oneline --decorate --all

这将显示一个相当容易阅读的提交表示,并显示指向不同引用的位置。许多人将此命令别名为git tree(即使它不是树,它是有向无环图,但无论如何......)

它还将显示每个提交的哈希以及提交消息。找到您想要的提交哈希并运行

git reset --hard <commithash>

请注意,这会将您的工作目录更改为 commithash 中的工作目录,这将删除任何未保存的工作。您可以执行软重置,并保留当前工作目录。

git reset --soft <commithash>

或者,您可以使用reflog。 Reflog基本上是HEAD如何变化的历史。正在运行

git reflog

将向您展示自克隆回购以来HEAD指向的所有地方的历史记录。您可以使用HEAD @ {n}命名系统将HEAD点设置为以前的位置。因此,如果您看到要返回的操作是

HEAD@{6}: checkout: moving from development to mainline

你可以运行

git checkout HEAD@{6}

你会没事的。就个人而言,除非你知道自己在做什么,否则我不推荐这个,因为它很容易从此处以独立的HEAD状态结束。