我正在学习通过git和sourcetree
使用源代码控制我的代码提交图只有一个分支。
Sourcetree在最近一次名为“细胞验证”的提交中绘制了标签“Master”
我在PlayerDispatcher
文件中添加了一行评论。 //commit undo test
我提交它像“提交撤消测试”
然后我双击了以前的版本(双击是checkout
)。出现了一个警告,说将创建一个单独的HEAD。我不明白它有什么问题,然后点击OK。
之后,该项目有两个分支。在“细胞验证”上有一个标签“HEAD”。在“提交撤销测试”中,有一个标签“Master”
我删除了SentCell
文件并添加了对PlayerDispatcher
文件的更改。
之后,我意识到我需要一些已删除SentCell
的功能,但在其他文件中。
我提交了所有更改,例如“已更改的PlayerDispatcher和已删除的SentCell”。
然后我双击“细胞验证”。现在“单元格验证”标记为头“提交撤消测试”标记为“主”,“更改的PlayerDispatcher和删除的SentCell”不存在(PlayerDispatcher
更改丢失)。
图表只有一个分支
为什么checkout会删除更新的文件?有没有办法恢复它(我做的更改主要是为了测试,但我仍然对它的可能性感兴趣)?有没有办法防止git被任何永久删除?
答案 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>