Git 代码版本还原方法

原文地址: http://www.cnblogs.com/restran/p/5208185.html

在使用 Git 管理自己的代码和资料时,难免会遇到意料之外的事。比如误操作,将当前的分支删除;或者重置到某个版本,然后发现自己想要的代码找不到了;又或者需要还原到之前提交的某个版本,但是那个版本已经被重置过,在历史中找不到了。

忙活了大半天,发现辛苦换来的成果都没了,遇到这种情况几乎是要崩溃的,不过幸好我们还有 Git。

一般情况下,如果在版本的分支历史上,还可以找到想要的那个版本,那通常比较简单,只要选择重置到该版本就可以了。

id="iframe_0.5419252060106479" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.restran.net/uploads/post_img/2016/02/git_0.png?_=5208185%22%20style=%22border:none;max-width:690px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5419252060106479',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; box-sizing: border-box; border: none; width: 579px; height: 425px;">

重置类型有三种模式可供选择,soft、mixed 和 hard 的区别如下:

soft 不改动工作区和索引

假设有一些 commits

A - B - C (master)

HEAD 指向 C, 并且暂存区(stage,或称为 index)matches C.

当使用 git reset --soft B 时,master 和 HEAD 指向 B,但是依然保留了 C 添加跟踪的文件,此时会将这些文件放入暂存区中,显示为已缓存。同时工作区中修改的文件,显示为未缓存。

mixed 保持工作区不变,重置索引

当使用 git reset --mixed B 时,master 和 HEAD 指向 B,这时候 C 添加跟踪的文件仍然会在,但是会显示为未缓存(不是版本控制),而当前工作目录中的修改内容,仍然会在,显示未缓存的状态

(如果不知道怎么选,默认使用 mixed)

hard 重置索引和工作区(丢弃所有本地变更)

当使用 git reset --hard B 时,C 添加跟踪的文件,以及当前工作目录中的修改内容,都会丢失。


如果比较悲剧,分支历史上已经找不到想要的那个版本的代码了,但是别急,只要是有提交的代码,Git 都能找回来。

我在 Windows 下使用 TortoiseGit,只要右键找到显示引用记录,就能找到所有的操作记录,然后选择想要的版本,重置过去就可以了。即便是现在这一步的重置操作选错了版本也没事,因为这个操作也被记录下来,你还是可以重置到正确的版本。

id="iframe_0.8004453236383788" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.restran.net/uploads/post_img/2016/02/git_1.png?_=5208185%22%20style=%22border:none;max-width:690px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.8004453236383788',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; box-sizing: border-box; border: none; width: 503px; height: 624px;">

看到这张图,是不是一股暖流涌上心头,终于找回来了。

id="iframe_0.38148393398949176" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.restran.net/uploads/post_img/2016/02/git_2.png?_=5208185%22%20style=%22border:none;max-width:690px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.38148393398949176',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; box-sizing: border-box; border: none; width: 536px; height: 351px;">

曾经尝试过用命令来操作,但是试了很久都没成功,只好放弃,改用 TortoiseGit 来操作。TortoiseGit 在 Windows 下几乎是最好用的 Git GUI 工具了。

自从使用了 Git,只要有 commit 过的代码,再也不担心会丢了,尽情的 commit 吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值