在rebase期间我怎么会丢失数据?

时间:2013-03-07 16:40:02

标签: git

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

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 

...来自给定的源分支

2 个答案:

答案 0 :(得分:2)

除了我和其他人的挑剔,你的问题,我认为真的相当(我说这没有恶意)“我在哪里,我是怎么来到这里的?”实际上是非常合理的,并且在学习使用git(甚至经验丰富的git用户,不时)时会出现很多。幸运的是,有一个git命令旨在回答你的确切问题。它是:

git reflog

如果您可以发布该命令的输出(好的,前50行左右),可以在此主题中开始显示更多信息性的答案。

答案 1 :(得分:0)

最近有关于rebase的git列表的讨论。

  1. 默认忽略合并
  2. 它忽略了“上游”中已有的任何内容。删除可能已在那里完成。
  3. rebase的文档中有许多关于隐藏在文本中需要仔细阅读的行为的“旁白”。