为什么sourcetree会删除我的提交?

时间:2014-09-16 16:10:08

标签: git version-control atlassian-sourcetree

我正在学习通过git和sourcetree

使用源代码控制

我的代码提交图只有一个分支。

Sourcetree在最近一次名为“细胞验证”的提交中绘制了标签“Master”

我在PlayerDispatcher文件中添加了一行评论。 //commit undo test

我提交它像“提交撤消测试”

然后我双击了以前的版本(双击是checkout)。出现了一个警告,说将创建一个单独的HEAD。我不明白它有什么问题,然后点击OK。

之后,该项目有两个分支。在“细胞验证”上有一个标签“HEAD”。在“提交撤销测试”中,有一个标签“Master”

我删除了SentCell文件并添加了对PlayerDispatcher文件的更改。

之后,我意识到我需要一些已删除SentCell的功能,但在其他文件中。

我提交了所有更改,例如“已更改的PlayerDispatcher和已删除的SentCell”。

然后我双击“细胞验证”。现在“单元格验证”标记为头“提交撤消测试”标记为“主”,“更改的PlayerDispatcher和删除的SentCell”不存在(PlayerDispatcher更改丢失)。

图表只有一个分支

为什么checkout会删除更新的文件?有没有办法恢复它(我做的更改主要是为了测试,但我仍然对它的可能性感兴趣)?有没有办法防止git被任何永久删除?

1 个答案:

答案 0 :(得分:4)

  

然后我双击了以前的版本(双击是checkout)。出现了一个警告,说将创建一个单独的HEAD。我不明白它有什么问题,然后点击OK。

     

之后,该项目有两个分支。在"细胞验证"有一个标签" HEAD"。 On"提交撤消测试"有一个标签" Master"

看起来你可能有两个分支,但你并不是真的。 HEAD不是分支机构;它是指向当前检出的内容的指针。当您再次选中master时,HEAD移至与master相同的位置,没有任何内容指向您的新提交。

Git只显示来自头部的可到达的提交。因为你没有创建第二个分支,Git没有显示那里的提交,但它可能仍在你的存储库中。

尝试运行git reflog。这应该包括类似

的内容
abcd123 HEAD@{0}: checkout moving from <some long hash> to master

如果您还没有修改过您的存储库,那么这可能就是第一行。如果你修改了它,你可能需要走几行。在这种情况下,HEAD@号码也会有所不同。

找到合适的行后,复制哈希(可能是前7个字符左右就足够了)并再次检查出来:

git checkout <hash from reflog>

你应该发现你已经收回了你的回复。现在,如果你想保留它,创建一个分支指向它:

git branch <branch-name> <hash from reflog>