似乎是在“(没有分支)”,然后失去了我的变化

时间:2017-05-14 15:08:39

标签: git

我正试图从我的Git工作区推送到Github,但我添加和提交的更改似乎没有上传。

然后,做一个“git branch”我得到的东西看起来像这样:

git branch
* (no branch)
  master
愚蠢的是,我以为我可以用

回到主人那里
git checkout master

现在我的变化似乎已经消失了。我的主要分支大约三天。似乎没有办法切换回这个(没有分支)。

我查看了这个问题Git : seemed to be in “(no branch)” and then lost my changes,其中答案建议执行git reflog show后检查。我试过了,我得到了这个:

$ git reflog
    0f27ae7 HEAD@{1}: checkout: moving from HEAD to master
    7b8ee7b HEAD@{2}: commit: 14/05/2017 3:33pm
    ff60409 HEAD@{3}: commit: 14/05/2017 3:33pm
    0f27ae7 HEAD@{4}: checkout: moving from master to 0f27ae7236aabbe8cccfba82e201e36368a05054
    0f27ae7 HEAD@{5}: commit: 11/05/2017 2:33pm
    3e4c616 HEAD@{6}: merge origin/master: Fast-forward
    1e79818 HEAD@{7}: commit: 10/5//2017 UI

我试图从0f27ae7236aabbe8cccfba82e201e36368a05054结帐,但我的更改没有回来。我想要的是恢复我做的最后一次提交(没有分支)(提交:14/05/2017 3:33 pm)

以下是git branch -a的结果:

$ git branch -a
* (HEAD detached from 0f27ae7)
  UI_linking
  master
  remotes/ado/newBranch
  remotes/origin/UI_linking
  remotes/origin/frogs1
  remotes/origin/master
  remotes/origin/newBranch
  remotes/origin/newMas

我的更改是否丢失了?或者有办法恢复它们吗?

3 个答案:

答案 0 :(得分:3)

git reflog的输出我会说你的更改是在提交7b8ee7bHEAD@{2})。

以下命令:

git branch lost 7b8ee7b
git checkout lost

应该在上述提交中创建一个新分支(名为lost),然后检查它。

然后你可以这样做:

git rebase master
git checkout master
git merge --ff lost

将您恢复的两个提交移到master分支的顶部,并使它们显示为master分支历史记录的一部分。

如果一切正常,那么您可以运行git branch -d lost来移除lost分支。

答案 1 :(得分:0)

您可以在git checkout 7b8ee7b恢复您的状态,其中7b8ee7b是您的reflog中HEAD@{2}下的哈希值 - 您切换到master之前的哈希值。

发生了什么:由于某种原因你从主分支切换到0f27ae7236aabbe8cccfba82e201e36368a05054并最终处于“分离头”状态。你做了一些提交,但那些不在任何分支上。这些提交仍然存在,您可以在reflog中看到它们。

虽然0f27ae7236aabbe8cccfba82e201e36368a05054是您的主人所指向的,但当您切换到哈希时,您不会切换到指向该提交的任何分支。

答案 2 :(得分:0)

原因是:您将分支推送到没有分支,宣布一些警告,但您忽略了它们。现在,这个代码分离到HEAD.So你的新修改代码将在HEAD~上。你可以在relog中看到:

  

0f27ae7 HEAD @ {4}:checkout:从master转移到0f27ae7236aabbe8cccfba82e201e36368a05054

将其取回的方法:

  1. 你拿到你的git来源:
  2.   

    git fetch origin

    1. 结帐至HEAD
    2.   

      git checkout remotes / origin / master

      1. 最后,将0f27ae7 HEAD @ {1}合并为主人
      2.   

        git merge HEAD @ {1}

        现在,你在主人那里得到了你的代码。

        此致