改变git branch base出错了

时间:2017-12-14 21:49:31

标签: git

我有一棵这样的树:

commit10 - commit11  <-- master
              |
              |-- commit3 <-- topic/branch1
                     |
                     |-- commit4 <-- topic/branch2

git日志看起来像这样:

$ git log -n 4
commit4
commit3
commit11
commit10

当我在使用commit4时,commit3被合并到master并且在历史记录中更远,所以我想将topic / branch2的分支基础更改为master,如下所示:

commit10 - commit11  <-- master
              |
              \-- commit4 <-- topic/branch2

所以,我做了以下git命令:

$ git checkout topic/branch2
$ git rebase --onto master topic/branch2
First, rewinding head to replay your work on top of it...

现在我无法在任何地方找到commit4。

现在git log int topic / branch2如下所示:

$ git log -n 2
commit2
commit1

如果我去主分支并在git日志历史中查找30个条目,我无法找到提交。

我的commit4去了哪里?我如何取回它?

1 个答案:

答案 0 :(得分:1)

感谢Makoto的评论,我能够通过查看reflog来解决这个问题。

我使用此restoring lost commits页面来恢复提交。结果证明,我的承诺被视为悬挂提交。

幸运的是,在我搞砸之前,我有了commit4的SHA1。所以我使用以下命令来证明git知道我的悬挂提示&#34;:

$ git fsck --lost-found
<lots of output>
dangling commit 0c990572fd1fd20a5db42141a7a4e0e6e97f6462
<even more output>

我还可以使用以下命令在reflog中看到commit4:

$ git reflog

根据前面提到的链接,您可以使用git merge或git checkout来恢复它。我使用了merge,因为链接说的更快。