【问题标题】:Messed up git repo: git log vs. git log -g搞砸了 git repo:git log 与 git log -g
【发布时间】:2013-07-15 18:03:35
【问题描述】:

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

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

  1. GitX 现在将 master 显示为与 origin/HEAD 和 origin/master 完全断开连接。 (见部分 GitX 窗口截图here。)
  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)之间的区别,但这似乎是我缺少的数据所在的位置。

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

【问题讨论】:

  • 关于 10 次提交,您仍然有一个远程跟踪分支指向您的仓库中的它们,origin/master
  • @Cupcake 不,它没有:他说他还没有推他们。
  • @Chronial 哦,提交是本地的,我的错误,我把它们弄混了。

标签: git version-control gitx


【解决方案1】:

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

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

【讨论】:

  • 步骤 0:复制你的 .git 文件夹。
猜你喜欢
  • 2018-08-08
  • 2022-01-05
  • 2021-01-25
  • 1970-01-01
  • 2022-06-29
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多