搞砸了git repo:git log vs. git log -g

时间:2013-07-15 18:03:36

标签: git version-control gitx

后台:我有一个有远程的本地存储库。一切都很顺利。我正在Mac上进行开发并使用Gi​​tX。在我要描述的问题出现之前,我已经在5天前推到了遥控器,并且从那以后有10个本地提交未被删除。

问题:我在GitX中提交了一个提交,写了它的提交消息,并按下了“提交”的键盘快捷键,就像我已经做了很多次一样。 (至少,所以我认为 - 我很快就做到了,所以也许我偶然做了一些不同的事情 - 不确定。)然后出现以下情况:

  1. GitX现在显示master与origin / HEAD和origin / master完全断开连接。 (参见GitX窗口here的一部分的屏幕截图。)
  2. GitX也没有显示自上次推送以来10次提交的记录。 (最近提交的10个提交不在该屏幕截图的列表中。)
  3. GitX似乎表明master的当前位置没有历史记录,好像 all 回购中的文件已添加在那个(最近的)提交中。 (未在屏幕截图中显示。)
  4. 命令行中的
  5. git log仅列出一个条目,即我刚刚提交的最后一个提交。
  6. 命令行中的
  7. git log -g列出了完整的历史记录,包括10个缺失的提交和最新的提交。
  8. 我不知道发生了什么,或者为什么上述任何事情都发生了。我不明白git loggit log -g(又名git log --walk-reflogs)之间的区别,但它似乎是我缺少的数据所在的位置。

    问题:如何才能取回仅出现在git log -g的10次提交?如何将主人重新连接到历史的其他部分?究竟是什么导致了这一点?

1 个答案:

答案 0 :(得分:1)

我不知道gitX,但它看起来很像你创建了一个没有父母的提交。如果是这种情况,您需要按照以下步骤操作:

  1. 复制您的.git存储库以防出现问题
  2. 请注意当前在master(SHA1
  3. 上提交的SHA
  4. 使用git reflog mastergitk --walk-reflogsgit log --walk-reflogs的组合来查找先前提交的SHA(SHA2)。
  5. 运行git checkout -B master **SHA2**以返回该提交
  6. 运行git checkout **SHA1** -- .以将更改恢复到工作目录中
  7. 你现在回到错误前的位置。因此,提交您的更改即可完成。