我怎样才能得到删除分支在git?
我正在尝试将git用于我们的软件开发。 我发现如果我在git中删除一个分支,我可能永远失去我的代码。 这让我感到惊讶。 我认为,作为一个版本控制系统,它应该能够让我做任何事情(甚至是愚蠢的),而不用担心损害我的工作。
以下步骤是我所做的:
- 初始化一个git仓库。
- 提交数据库的一些更改。
- 开关/结帐当前工作目录首先提交。
- 删除主分支。
- 那么我失去了所有的作品,我不能相信我所看到的。 这是真的吗? 如果我在编码时喝醉了。 我可能会在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
很简单,现在我可以继续在删除之前合并分支。