在分离的HEAD状态下创建的git提交会发生什么?

问题描述 投票:120回答:7

这就是发生的事情:

我有一个分支A.在分支A上,我进行了一系列更改。我对代码不满意,所以我检查了分支A中的先前提交。然后我做了一些更改并在分支A上提交它们。现在我无法在任何地方找到此提交。我丢失了这段代码吗?

git
7个回答
163
投票

旧提交仍在reflog中。

git reflog

这将显示提交列表,并且“丢失”提交应该在那里。你可以把它变成一个新的分支。例如,如果SHA-1是ba5a739,那么您可以在旧提交中创建一个名为“new-branch”的新分支:

git branch new-branch ba5a739

请注意,修剪数据库时将删除“丢失”提交。


49
投票

正如已经指出的那样,你的提交仍然可以在reflog中找到。除了其他答案之外,还有一种方法可以直接将分离的HEAD提交接管到当前分支中,而无需创建和合并新分支:

  1. 查找在分离的HEAD状态下提交的提交的SHA-1哈希值 git reflog
  2. 然后执行,所有提交的哈希值从最旧到最近排序: git cherry-pick <hash1> <hash2> <hash3> ... 例如,如果我只有一个,以“前7个字符”短哈希格式给出: git cherry-pick a21d053

这将为您当前的分支创建新的提交,您在命令中提到的每个detached-HEAD-commit哈希提交一次。它还接管原始提交消息。


10
投票

您可以使用以下命令找到丢失(悬空)提交:

git fsck --lost-found

请注意,如果您当前的头部是悬空提交,则不会将其列为丢失。

您可以在git-fsck(1) Manual Page找到更多信息

然后你可以在丢失的提交上创建分支:

git branch new-branch ba5a739

6
投票

Git对工作目录状态的说法是“detached HEAD。”这是另一个git reflog进行保存的地方。

$ git reflog
0b40dd6 HEAD@{0}: commit: my commit on detached HEAD
...

如果我尝试签出一个不同的分支,git-1.7.5.1给出了一个有用的建议。

$ git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  0b40dd6 my commit on detached HEAD

If you want to keep them by creating a new branch, this may be a good time
to do so with:

 git branch new_branch_name 0b40dd65c06bb215327863c2ca10fdb4f904215b

Switched to branch 'master'

5
投票

你没有丢失它,Git仍然保留一份副本(但目前任何分支机构都无法访问)。您可以使用git reflog命令找到丢失的提交。 reflog会跟踪分支头的历史位置,您可以使用它来查找分支头先前指向的内容。


3
投票

按照以下步骤将分离的头部链接回git repo

  1. git checkout "your branch with path but without remote name"

例如如果远程名称是原点而分支名称是bugfix/somebranch则使用git checkout bugfix/somebranch

  1. git reflog从您的分离分支的提交列表中获取提交的SHA。
  2. git cherry-pick "commit hash1" "commit hash2" "commit hash3"
  3. git push

搞定!!


1
投票

在Sourcetree中,我发现git reflog不起作用,所以我想出了如何使用GUI来做到这一点。

首先,尝试通过在命令历史记录中查找消息来查找“丢失”提交(视图:显示命令输出)。希望在您丢失的提交之后,在“切换分支”命令中,您将看到具有1234567提交ID的提交注释。

将该提交ID转到下一步。

点击顶部工具栏中的“分支”按钮,您应该会出现一个“新建分支”对话框,您可以在其中指定某个提交。把那个提交ID放在那里,指定一个新的分支名称,点击Create Branch,你应该得到一个新的分支与丢失的提交!

这给我带来了一些失去的工作!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.