我正在尝试使用git进行软件开发.我发现如果我在git中删除一个分支,我可能永远丢失我的代码.这让我感到惊讶.我认为作为版本控制系统,它应该能够让我做任何事情(甚至是愚蠢的),而不用担心伤害我的工作.
以下是我的所作所为:
问题是如何回滚删除分支的操作?或者,我怎样才能获得git中的所有历史记录,甚至是日志中消失的东西?
Von*_*onC 67
为了避免这个问题,Jefromi在评论中提出建议:
另一个提示:只使用
git branch -d,而不是git branch -D.
如果您要删除可能导致您失去工作的内容,您会收到警告,然后您可以在使用之前花一点时间思考-D.
(或者,您可以删除,gitk以便您真正看到要删除的内容.)
-d
Run Code Online (Sandbox Code Playgroud)
删除分支.
分支必须在其上游分支中完全合并,或者HEAD如果没有上游设置为--track或者--set-upstream.
但如果你"失去"你的工作,请参阅许多 关于reflog的博客之一(正如James Kyburz在评论中所建议的那样):
返回列表Git reflog to rescue救援2010年9月9日 - 由Chris Sloan编写 0条评论»
前几天,我正在使用我们当前的分支策略为Real Travel开发一个功能,因为我们每个版本都是一个单独的分支.
不确定是否是因为拉了晚上睡眠不足的原因,但是在我将其合并回主分支以供发布之前,我不小心删除了我的本地和远程分支副本.
经过一段时间的快速震惊和思绪贯穿于失去工作时间之后,我平静下来,依靠我的Git知识.
阅读完整的提交历史记录:有两种方法可以在git中读取提交历史记录.第一种方式显示详细信息提交列表,而另一种方式显示对当前日志的引用
HEAD.
// log of detailed commits by users
$> git log
// reference log compared to the current HEAD
$> git reflog
Run Code Online (Sandbox Code Playgroud)
使用该
reflog命令,我能够确切地找到我删除的分支的最后一个引用的位置.可能
的示例输出reflog如下所示:
c7f3d98 HEAD@{0}: commit: Merged in some code
f5716c8 HEAD@{1}: pull : Fast-forward
d93c27b HEAD@{2}: commit: Added some items to project
...
Run Code Online (Sandbox Code Playgroud)
现在,reflog不会准确显示分支被删除的位置,但是如果你记得你最后一次提交到该分支并且有足够详细的消息,那么它应该很容易找到和恢复.
通过检查您想要新分支的HEAD,可以直接恢复您的分支.
$> git checkout -b my_new_branch HEAD@{5}
Run Code Online (Sandbox Code Playgroud)
您也可以使用哈希来签出新分支.
$> git checkout -b my_new_branch d93c27b
Run Code Online (Sandbox Code Playgroud)
很简单,现在我可以继续在删除之前合并分支.