以下是对几分钟前发生在我身上的事情的简短重述。 一切都是好的。我现在找到了代码。我只是想知道在达到这种情况时我可能做错了什么。我想从中学习,所以我将来可以再次避免它。
FWIW:我最近一直在做一些变相。我通常不这样操作,我怀疑答案可能在于一些糟糕的变基。我们会看到。
发现
所以我刚刚改为我记得执行一些提交的分支。实际上,头部提交是包含我想要的更改的提交。但是我的改变不存在!
相反,只有一些变化。 :(
经过仔细检查,我发现其余的更改只是删除。我想你可能就是这样,我可能没有在调用commit之前添加所有更改,这是我自己的错。
更新:原始提交应该包含一些添加,一些删除和一些修改的文件。这个新的“重新定位”提交似乎只是删除了我期望的内容。
研究
我最近放下了一个我认为我不再需要的藏匿处。也许我的改变在那里?
我发现this SO question解释了如何使用...
识别所有无法访问的提交gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
我设法找到同一个提交的几个版本(即使用相同的提交消息)在同一个第二个
创建(alledgedly)我认为这是可以理解的,因为它们很可能是在一个或多个rebase操作期间生成的副本,并且可能已经给出了原始提交日期。
那怎么可能呢?
这是有趣的地方:
其中一项提交与其他提交不同。其中一个提交包含了我所有丢失的数据。
所以我的问题是......我是怎么做到的?我是否以一种可用数据落后的方式进行了改造?
任何线索\理论?
更新 我在评论中被问到我采取了什么步骤来到这里。 麻烦就是这个问题的重点。
我可以做些什么来创建2个或更多个提交副本,其中描述匹配但内容没有?
我可以就我可能使用过的部分提出一些建议,但那是关于它的。 我一直在做一些简单的变调。即我访问了一个分支并执行:
git rebase master
我还做了一些进一步的调查,发现正确的提交确实是最早的。我看过使用gitK,作者旁边的日期总是昨天11:50:35。还有另一个日期(提交日期)似乎与后来的重组相吻合,但我发誓我只用了......
git rebase master
...来自给定的源分支
答案 0 :(得分:2)
除了我和其他人的挑剔,你的问题,我认为真的相当(我说这没有恶意)“我在哪里,我是怎么来到这里的?”实际上是非常合理的,并且在学习使用git(甚至经验丰富的git用户,不时)时会出现很多。幸运的是,有一个git命令旨在回答你的确切问题。它是:
git reflog
如果您可以发布该命令的输出(好的,前50行左右),可以在此主题中开始显示更多信息性的答案。
答案 1 :(得分:0)
最近有关于rebase的git列表的讨论。
rebase的文档中有许多关于隐藏在文本中需要仔细阅读的行为的“旁白”。