0

背景: 我有一个本地存储库,它有一个远程。一段时间以来,一切都进展顺利。我在 Mac 上进行开发并使用 GitX。在我要描述的问题之前,我 5 天前已经推送到远程,并且从那时起有 10 次本地提交未推送。

问题: 我在 GitX 中进行了提交,编写了提交消息,然后按下了“提交”的键盘快捷键,就像我做过很多次一样。(至少,所以我认为——我做得很快,所以也许我偶然做了一些不同的事情——不确定。)然后发生了以下情况:

  1. GitX 现在显示 master 与 origin/HEAD 和 origin/master 完全断开。(在此处查看部分 GitX 窗口的屏幕截图。)
  2. GitX 也没有显示自上次推送以来 10 次提交的记录。(最近 10 次提交不在该屏幕截图的列表中。)
  3. GitX 似乎表明 master 的当前位置没有历史记录,就好像repo 中的所有文件都添加到了那个(最近的)提交中。(屏幕截图中未显示。)
  4. git log从命令行仅列出一个条目,即我刚刚进行的最后一次提交。
  5. git log -g从命令行列出完整的历史记录,包括 10 个丢失的提交和最近的一个。

我不知道发生了什么,也不知道为什么会发生上述 5 件事。我不明白git loggit log -g(又名git log --walk-reflogs)之间的区别,但它似乎是我缺少的数据所在的位置。

问题:如何取回仅出现在 10 中的 10 次提交git log -g?我怎样才能将主人重新附加到历史的其余部分?究竟是什么导致了这一切?

4

1 回答 1

1

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

  1. 复制您的.git存储库以防出现问题
  2. SHA1请注意您当前在 master ( )上提交的 SHA
  3. 使用git reflog master和 也许gitk --walk-reflogs或的组合git log --walk-reflogs来查找您之前提交的 SHA ( SHA2)。
  4. 运行git checkout -B master **SHA2**以返回该提交
  5. 运行git checkout **SHA1** -- .以将您的更改恢复到工作目录中
  6. 你现在又回到了你犯错之前的位置。所以提交你的更改,你就完成了。
于 2013-07-15T20:47:26.527 回答