原文地址:http://blog.csdn.net/hudashi/article/details/7664460
原文如下:
git revert 是撤销某次操作,此次操作之前的commit都会被保留
git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区
具体一个例子,假设有三个commit, git st:
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c
当执行git revert HEAD~1时, commit2被撤销了
git log可以看到:
commit1:add test1.c
commit3:add test3.c
git status 没有任何变化
如果换做执行git reset --soft(默认) HEAD~1后,运行git log
commit2: add test2.c
commit1: add test1.c
运行git status, 则test3.c处于暂存区,准备提交。
如果换做执行git reset --hard HEAD~1后,
显示:HEAD is now at commit2,运行git log
commit2: add test2.c
commit1: add test1.c
运行git st, 没有任何变化
另外:
git revert <commit log string>是撤消该commit,作为一个新的commit。
本人示例如下:
1,初始化git仓库
mkdir test cd test git init touch test1.c touch test2.c touch test3.c git add test1.c git commit -m “第一次提交” git add test2.c git commit -m “第二次提交” git add test3.c git commit -m “第三次提交”
git log查看结果:
commit 4f6aa621149f98edf8887fa2219b63c84a95f317 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第三次提交” commit 4bf0d2237bddd50e3674d264eebcf696af61790a Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第二次提交” commit 61f08c6d73f7f5822a39fba5b177d5394c77f26d Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第一次提交”
2,执行git revert HEAD~1
查看git log
结果:
commit 8119ed3e329a2cd939291949cd265db6fc658b76 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:48:31 2016 +0800 Revert "“第二次提交”" This reverts commit 4bf0d2237bddd50e3674d264eebcf696af61790a. commit 4f6aa621149f98edf8887fa2219b63c84a95f317 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第三次提交” commit 4bf0d2237bddd50e3674d264eebcf696af61790a Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第二次提交” commit 61f08c6d73f7f5822a39fba5b177d5394c77f26d Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第一次提交”
git status查看:
On branch master nothing to commit, working directory clean
ls查看:
test1.c test3.c
发现 test2.c文件找不到了,但是可以通过再次运行git revert HEAD~1命令找回来,找回来的文件放在了暂存区里了。
3,重新建立删除原有test仓库,并重新建立和初始化
执行git reset HEAD~1
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看结果:
On branch master Untracked files: (use "git add <file>..." to include in what will be committed) test3.c nothing added to commit but untracked files present (use "git add" to track)
test3.c文件在当前工作目录,并没有进入暂存区,所以是红色字体显示(未被追踪的文件)
4,重新建立删除原有test仓库,并重新建立和初始化
执行git reset --soft HEAD~1
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看结果:
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: test3.c
test3.c文件放在了暂存区里了。
无论是git reset HEAD~1 还是 git reset --soft HEAD~1,都能撤销指定的提交,只不过,前者将撤销的提交放在了当前目录,后者将撤销的提交放在了暂存区。而且使用ls查看,三个文件也都在当前工作目录里呢。
注意:如果执行git reset --soft HEAD~2则第二次提交和第三次提交的文件都撤销了,放入暂存区里了。
5,重新建立删除原有test仓库,并重新建立和初始化
执行git reset --hard HEAD~1结果:
HEAD is now at 09e51cd “第二次提交”
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看:
On branch master nothing to commit, working directory clean
ls查看:
test1.c test2.c
发现test3 文件丢失。
相关推荐
主要介绍了git revert和git reset的区别详解的相关资料,需要的朋友可以参考下
前端大厂最新面试题-git reset_ git revert.docx
1.--soft: 仅仅移动本地库 ...2.--mixed:本地库和暂存区否会变 git reset --mixed 版本号 如果是前进 相当于工作区自己后退了 如果是后退,相当于工作区前进了 此时git status,也会相应的发生变化,比如 变红色、变绿色等
06★Git入门★把握Git状态_git_status_reset
git视频教程.3.5.Git 命令 - git reset.mp4 git视频教程.4.1.Git 命令 - git branch.mp4 git视频教程.4.2.Git 命令 - git branch.mp4 git视频教程.4.3.Git 命令 - git branch.mp4 git视频教程.4.4.Git 命令 - git ...
Git_和repo扫盲
主要介绍了Git撤销&回滚操作(git reset 和 get revert),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
git使用详细介绍
git 删除分支和回滚的实例详解 【git 删除本地分支】 git branch -D br 【git 删除远程分支】 git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 【本地...
主要介绍了详解IDEA Git Reset 选项说明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
git安装和小乌龟安装包
主要介绍了详解git reset --hard 和 git reset --soft区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git...
Git与Github教程详细介绍了Git的工作机制,Git命令行的基础学习,Git-Eclipse和Nginx的准备工作,Git与Github分支体系,Git与Github的远程和本地工作原理,Git与Github克隆实战和最后的课程精华总结部分,可以帮助...
Gitblit搭建及Git协作开发流程参考
git 常用命令, 对初学者很有帮助, 从简单例子着手。 浅入浅出,通俗易懂
学习git和gitbash使用的一些详细操作,学习git和gitbash使用的一些详细操作
2、make_new_old(gitdir,workdir,output),参数gitdir:git命令所在路径,本人机器安装在"F:\\Git\\Bin\\git",workdir:代码git仓所在的路径,注意是仓的第一级目录,output:指定生成new和old文件的目录 ...
问题描述: 在使用git 进行提交时, 出现上面这个报错, 导致无法提交. 报错大致意思就是创建index.lock文件失败,因为已经存在index.lock文件了. index.lock文件是在.git下面, 而.git是一般是隐藏的, 那么可以通过以下...
2、主要内容是Git的介绍、Git的特点、集中式和分布式版本控制系统的不同与优点、Git和GitHub以及GitLab的区别、Git的安装和配置、Git的工作流程、Git的工作原理、暂存区和工作区以及版本库的概念、开发场景中常用的...