我怎样才能得到删除分支在git?

我正在尝试将git用于我们的软件开发。 我发现如果我在git中删除一个分支,我可能永远失去我的代码。 这让我感到惊讶。 我认为,作为一个版本控制系统,它应该能够让我做任何事情(甚至是愚蠢的),而不用担心损害我的工作。

以下步骤是我所做的:

  1. 初始化一个git仓库。
  2. 提交数据库的一些更改。
  3. 开关/结帐当前工作目录首先提交。
  4. 删除主分支。
  5. 那么我失去了所有的作品,我不能相信我所看到的。 这是真的吗? 如果我在编码时喝醉了。 我可能会在git中丢失代码。

问题是如何回滚删除分支的操作​​? 或者,我怎样才能得到所有的历史,甚至在日志中消失的东西?

为了避免这个问题, Jefromi在评论中build议:

另一个提示:只使用git branch -d ,而不是git branch -D
如果你要删除一些可能会让你失去工作的东西,那么你会被警告,那么在使用-D之前,你可以花点时间思考一下。
(或者,你可以从gitk删除,所以你真的看到你正在删除。)

 -d 

删除一个分支。
分支必须在其上游分支完全合并,否则如果没有上游设置为--track--set-upstream则分支在HEAD


但是,如果你“失去”了自己的工作,可以看看许多 有关reflog的 博客 (正如James Kyburz在评论中所build议的那样):

Git reflog来拯救 :

回到列表Git reflog拯救2010年9月9日 – 由克里斯·斯隆编写| 0条评论»

有一天,我正在使用我们当前的分支策略为Real Travel开发一个function,因为每个版本都是独立的分支。
不知道这是晚上睡眠不足的原因拉,但我不小心删除了我的本地和远程副本的分支之前,我把它合并到主分支释放
在经历了一段时间的工作之后,我感到一阵震惊和思考,我平静下来,依靠我的Git知识。
阅读完整的提交历史logging:

有两种方法可以在git中读取提交历史logging。 第一种方式显示提交细节列表,而另一种显示引用当前HEAD的日志。

 // log of detailed commits by users $> git log // reference log compared to the current HEAD $> git reflog 

使用reflog命令,我能够确切地find最后一个引用到我删除的分支。
reflog输出示例可能如下所示:

 c7f3d98 HEAD@{0}: commit: Merged in some code f5716c8 HEAD@{1}: pull : Fast-forward d93c27b HEAD@{2}: commit: Added some items to project ... 

现在,reflog不会精确地显示分支被删除的位置,但是如果您记住了最后一次提交到该分支并且有足够详细的消息,应该很容易find并恢复。

通过检查你想要build立一个新分支的HEAD来恢复你的分支是很简单的。

 $> git checkout -b my_new_branch HEAD@{5} 

你也可以使用哈希来签出新的分支。

 $> git checkout -b my_new_branch d93c27b 

很简单,现在我可以继续在删除之前合并分支。