有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如删除一个分支,我都担心数据丢失。
不 久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一。直到最近我才发现git的历史记录是不可修改的,也就是说你不能更 改任何已经发生的事情。你做的任何操作都只是在原来的操作上修改。也就是说,即使你删除了一个分支,修改了一个提交,或者强制重置,你仍然可以回滚这些操 作。
让我们来看一些例子:
$ git init
$ touch foo.txt
$ git add foo.txt
$ git commit -m "initial commit"
$ echo 'new data' >> foo.txt
$ git commit -a -m "more stuff added to foo"
你现在看git的历史记录,你可以看到两次提交:
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit
现在让我们来重置回第一次提交的状态:
$ git reset --hard b7057a9
$ git log
* b7057a9 (HEAD, master) initial commit
这看起来我们是丢掉了我们第二次的提交,没有办法找回来了。但是 reflog 就是用来解决这个问题的。简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit
所以,我们要找回我们第二commit,只需要做如下操作:
$ git reset --hard 98abc5a
再来看一下 git 记录:
$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit
所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。
- 浏览: 799208 次
- 性别:
- 来自: 哈尔滨
最新评论
-
doloveme:
$sudo cp MONACO_Linux.ttf /usr/ ...
terminator 的配置 -
腾讯rep:
lowser
RSA加密算法c++简单实现 -
csuhanyong:
好YD啊,好YD
一图流:机械键盘各轴区别 -
doloveme:
1。其中:extman ,extmail下载http://ww ...
Ubuntu下安装postfix+extmail邮件服务器 -
doloveme:
repo sync出现“fatal: '../platform ...
Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
相关推荐
主要介绍了详解git reset --hard 和 git reset --soft区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了详解git reset 加不加 --hard的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。 要重返未来,用git reflog查看命令...
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将最近3次的提交回滚 【远程代码库回滚】: 这个是重点要说的内容,过程比本地回滚要复杂 应用场景:...
git windows服务
git命令-git命令-git命令-git命令
1.--soft: 仅仅移动本地库 原先是统一战线的,git reset --soft 版本号 如果是后退了,相当于 工作区、暂存区 前进了 如果是前进了,相当于 工作区、暂存区 后退了 这个时候 git status 会根... 2.--mixed:本地库和暂存...
最新版的git安装包(Git-2.13.2-64-bit)
git 基本命令整合 Git基本常用命令如下: git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。 git add 文件/(* 目录内所有文件) 将... git reset --hard HEAD git文件版本号 回退到上一个版本
Git-2.28.0-64-bit.exe Git-2.28.0-64-bit.exe Git-2.28.0-64-bit.exe
Git-2.33.1-64-bit和Git-2.28.0-64-bit.exe
git-lfs-windows-v3.2.0.exe
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Git-2.12.0-64-bit 64位下载
git-2.41.0-64-bit window版本下载
git-when-merged, 确定特定提交合并到 git branch的时间 git when-mergedgit when-merged 帮助你了解什么时候以及为何将提交合并到分支中。如果使用标准的Git工作流,则为你正在处理的每个特性创建一个特性分支。 当...
git客户端,安装GitExtensions-2.48.05-SetupComplete.msi,语言记得选自己能看懂的语言,我选的泰文,后面无法切换。
GitExtensions-2.49.03-SetupComplete.msi 支持VS2008~VS2015
Git-2.23.0-64-bit.zip