使用git reflog恢复由于reset丢掉的commit

上个星期的最后一个工作日,我的一个同事突然跟我说他丢掉了所有的前两天的工作,因为他使用了git reset命理到了一个之前的commit,而他本地新的工作并没有push到远程。在收到这个“噩耗”般的消息后,已经被多个事情需要在周末之前确定的我,一时心脏都快要停止跳动了(joking… ^_^) 。但是,我相信git的威力它一定有办法把这个东西恢复过来。确实,结果这个工作其实非常的容易:

      1. 首先,你必须没有跑过git的垃圾处理,”git gc”(这个我放心,估计我的同事连这个命令的存在都不知道),这样,所有那些于head脱离的处于悬吊状态(dangling)的commits都还没有消失。
      2. 运行,”git reflog” 命理 ( reflog 代表 reference log )。这将列出一系列历史的commits,包括它们的commit SHA1 ID 和一个commit的短消息。显示的这个commit的短消息非常有用,因为一般你不会记得你的commit的SHA1,但是你会认出你的commit的消息。
      3. 找到你需要恢复的commit的SHA1。比如,假设你需要恢复的commit的ID是 SHA33ddf。
      4. 运行命令 “git branch branchName SHA33ddf”,这将会创建一个新的分支并指向你的commit SHA1。你的工作就神奇般的恢复了!
      5. 最后一步可能是你需要设定你的新建的这个分支和远程相应地分支跟踪。假设你的远程源的名字是upstream,运行命令”git branch -u upstream/branchName branchName”。
No Comments - Leave a comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*