这是发生了什么:
我有一个分支A。在分支AI上进行了一堆更改。我对代码不满意,因此我签出了分支A中的上一个提交。然后,我做了很多更改,并将它们提交到分支A中。现在,我在任何地方都找不到此提交。我丢失了此代码吗?
HEAD而分支A将停留在上一次提交中。您究竟运行了哪些命令?
这是发生了什么:
我有一个分支A。在分支AI上进行了一堆更改。我对代码不满意,因此我签出了分支A中的上一个提交。然后,我做了很多更改,并将它们提交到分支A中。现在,我在任何地方都找不到此提交。我丢失了此代码吗?
HEAD而分支A将停留在上一次提交中。您究竟运行了哪些命令?
Answers:
旧的提交仍在reflog中。
git reflog
这将显示提交列表,“丢失的”提交应该在其中。您可以将其放入新分支。例如,如果SHA-1是ba5a739,则可以在旧提交中使用以下命令创建一个名为“ new-branch”的新分支:
git branch new-branch ba5a739
请注意,修剪数据库后,“丢失的”提交将被删除。
git cherry-pick [SHA]移动提交到现有的分支,以防不小心而脱落国家元首承诺
prune会删除提交消息中引用的分离提交?还是使它们可达?
如前所述,您的提交仍可在reflog中使用。除了其他答案之外,这是一种将分离的HEAD提交直接接管到当前分支中的方法,而无需创建和合并新分支:
使用以下命令在分离的HEAD状态下查找提交的SHA-1哈希
git reflog
然后执行,将所有提交哈希值从最早到最新的顺序排序:
git cherry-pick <hash1> <hash2> <hash3> ...
例如,如果我只有一个,则以“前7个字符”的短哈希格式给出:
git cherry-pick a21d053
这将对当前分支创建新的提交,即您在命令中提到的每个HEAD分离哈希提交一个提交。它还将接管原始提交消息。
您可能会发现使用以下命令丢失(悬挂)的提交:
git fsck --lost-found
请注意,如果您当前的头悬空提交,则不会将其列为丢失。
您可以在git-fsck(1)手册页上找到更多信息。
然后,您可以在丢失的提交上创建分支:
git branch new-branch ba5a739
Git认为工作目录的状态是“ 分离的HEAD”。这是另一个git reflog保存的地方。
$ git reflog
0b40dd6 HEAD@{0}: commit: my commit on detached HEAD
...
如果我尝试签出其他分支,则git-1.7.5.1会提供有用的建议。
$ git checkout master 警告:您将留下1个提交,但未连接到 您的任何分支机构: 0b40dd6我对分离头的提交 如果您想通过创建新分支来保留它们,这可能是个好时机 为此: git branch new_branch_name 0b40dd65c06bb215327863c2ca10fdb4f904215b 切换到“主人”分支
git reset不是git checkout吗?