3

以下是对几分钟前发生在我身上的事情的简短复述。一切都是好的。我现在找到了代码。我只是想知道我可能做错了什么来达到这种情况。我想从中吸取教训,以便将来再次避免。

FWIW:我最近一直在做一些变基。我通常不这样操作,我怀疑答案可能在于一些糟糕的变基。我们拭目以待。


发现

所以我只是换了一个分支,我记得在其中执行了一些提交。实际上,头部提交是包含我想要的更改的提交。但是我的更改不存在!

相反,只有一些变化存在。:(

经过仔细检查,我发现剩余的更改只是删除。我想就像你可能的那样,我可能没有在调用提交之前添加所有更改,这是我自己的错。

更新:原始提交应该包含一些添加、一些删除和一些修改的文件。这个新的“重新定位”提交似乎只是删除了我所期望的内容。

调查

我最近放下了一个我认为我不再需要的藏匿处。也许我的改变在那里?

我发现了这个 SO question,它解释了我如何使用...识别所有无法访问的提交

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

我设法找到在同一秒创建(据称)相同提交(即具有相同提交消息)的多个版本

我认为这是可以理解的,因为它们很可能是在一次或多次 rebase 操作期间生成的副本,并且可能已经给出了原始提交日期。

那么这怎么可能呢?

这就是有趣的地方:

其中一个提交与其他提交不同。其中一个提交包含了我所有丢失的数据。

所以我的问题是……我是怎么做到的?我是否以一种留下一半可用数据的方式重新设置基准?

任何线索\理论?

更新: 我在评论中被问到我采取了哪些步骤到达这里。问题是这就是问题的重点。

我可以做些什么来创建描述匹配但内容不匹配的提交的 2 个或更多副本?

我可以对我可能使用过的作品提出一些建议,但仅此而已。我一直在做一些简单的变基。即我访问了一个分支并执行了:

git rebase master

我还做了一些进一步的调查,发现正确的提交确实是最早的。我用 gitK 看过,作者旁边的日期总是昨天 11:50:35。还有另一个日期(提交日期)似乎与后来的变基重合,但我发誓我只使用过......

git rebase master 

...来自给定的源分支

4

2 回答 2

2

除了我和其他人的吹毛求疵之外,你的问题,我认为这真的相当于(我这样说没有恶意)“我在哪里,我是怎么到这里的?” 实际上是相当合理的,并且在学习使用 git 时出现了很多(甚至对于有经验的 git 用户,有时也会出现)。幸运的是,有一个 git 命令旨在回答您的确切问题。这是:

git reflog

如果您可以发布该命令的输出(嗯,前 50 行左右),更多信息性答案可能会开始出现在该线程中。

于 2013-03-07T17:52:46.280 回答
0

最近在 git list 上有一个关于 rebase 的讨论。

  1. 它默认忽略合并
  2. 它忽略任何已经在“上游”中的东西。删除可能已经在那里完成。

rebase 的文档有许多关于隐藏在文本中的行为的“旁白”,需要仔细阅读。

于 2013-03-07T17:59:06.843 回答