git reset总结
git reset
git 的重置操作
有三种模式:hard、mixed(默认)、soft
1. hard 用法
hard会重置stage区和工作区,和移动代码库上HEAD 和branch的指针所指向的位置,所有的都没了(干净了),如果工作区或stage区有修改,则全部舍弃了
//重置到与代码库HEAD所指向的commit处(一般都是最新的commit)
git reset --hard HEAD
//重置到与代码库HEAD的上一个commit处(即第二个,从上往下数)
git reset --hard HEAD^
//重置到与代码库HEAD的上两个commit处(即第三个,从上往下数)
git reset --hard HEAD^^
//重置到与代码库HEAD的上N个commit处
git reset --hard HEAD~N
ps:实际上还是有的,如果你记得之前的commit-id ,还可以checkout过去(checkout游离)
也就是说hard在代码库的操作是移动了head branch 所指向的位置,而不是删除了commit
2. soft 用法
soft 不会重置stage区和工作区,并将由于移动HEAD 和 Branch 带来的差异放进stage区
//重置到与代码库HEAD所指向的commit处(一般都是最新的commit)
git reset --soft HEAD
//重置到与代码库HEAD的上一个commit处(即第二个,从上往下数)
git reset --soft HEAD^
//重置到与代码库HEAD的上两个commit处(即第三个,从上往下数)
git reset --soft HEAD^^
//重置到与代码库HEAD的上N个commit处
git reset --soft HEAD~N
比如
当前暂存区和工作区的内容为
➜ reset_test git:(master) ✗ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: d.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: c.txt
执行
➜ reset_test git:(master) ✗ git reset --soft HEAD^
后,暂存区和工作区的内容为
➜ reset_test git:(master) ✗ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: c.txt
new file: d.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: c.txt
可以看到上一个commit的内容回到了暂存区内,这样就相当于可以修改这个commit的内容了
3. mixed (即默认) 用法
不跟参数,本身就是使用mixed
比如:
➜ reset_test git:(master) ✗ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: d.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: c.txt
git log 为
9a4ab25 (HEAD -> master) commit c
72b36c9 commit b
a3ce6eb commit a
9b4b913 第一次提交
现在回滚到 commit b
git reset HEAD^
可以看到日志变为
72b36c9 (HEAD -> master) commit b
a3ce6eb commit a
9b4b913 第一次提交
在 git status 看一下
➜ reset_test git:(master) ✗ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
c.txt
d.txt
将代码库 暂存区 的修改及工作区的修改一并打包放入了暂存区;暂存区被清空
reset 模式总结
--hard : 代码库代码回退到某个commit,暂存区和工作区内容丢弃
--soft: 代码库代码回退到某个commit,回退的修改和原暂存区的修改一起放入暂存区,工作区修改保留
--mixed: 代码库代码回退到某个commit,回退的修改和原暂存区的修改加上工作区的修改一并放入工作区
由此可见,mixed作为默认是很科学的
reset总结
reset 的本质:移动 HEAD 以及它所指向的 branch
实质上,reset 这个指令虽然可以用来撤销 commit ,但它的实质行为并不是撤销,而是移动 HEAD ,并且「捎带」上 HEAD 所指向的 branch(如果有的话)。也就是说,reset 这个指令的行为其实和它的字面意思 "reset"(重置)十分相符:它是用来重置 HEAD 以及它所指向的 branch 的位置的
git reset总结的更多相关文章
- git revert和git reset的区别
git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git s ...
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- 撤销git reset soft head操作
一不小心在eclipse的git库中执行了Reset Soft(HEAD ONLY)操作,不料界面中竟然没有找到撤销方法(于是心中五味俱全,经过一番折腾,无果还是回归Git本身),最终通过命令行,很快 ...
- [转]恢复 git reset -hard 的误操作
转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 r ...
- git reset revert 回退回滚取消提交返回上一版本
git reset revert 回退回滚取消提交返回上一版本 总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你 ...
- 每天一命令 git reset
在使用git的时候不免遇到commit的时候commit了错误的代码的时候,这时候就需要用到git的常用命令之一 reset了. reset顾名思义为重置.重置的是HEAD指针,可以使HEAD指针移 ...
- [译]git reset
git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...
- 恢复 git reset -hard 的误操作
有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...
- git revert 和 git reset的区别
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD ...
- git的几种回滚 git revert 和 git reset的区别
git的几种回滚 git revert 和 git reset的区别:强烈建议:对HEAD不熟的话最好不要用HEAD,直接用commitID吧,我遇到的问题:reset HEAD~1之后,可能是别人提 ...
随机推荐
- c++(qt)播放wav文件的四种方式
//方法一(要符合RIFF规范) 1 QSound::play("E:/Projects/报警声1-1.wav"); //方法二(要符合RIFF规范) 1 QSoundEffect ...
- UiPath数据抓取Data Scraping的介绍和使用
一.数据抓取(Data Scraping)的介绍 使用截据抓取使您可以将浏览器,应用程序或文档中的结构化数据提取到数据库,.csv文件甚至Excel电子表格中. 二.Data Scraping在UiP ...
- jenkins部署docker
1. 先在jenkins上配置拉取代码部分,需要在git上找到项目位置,直接复制url即可 http://192.168.0.161:3000/IT-Insurance/Back.Test-Walle ...
- Linux 安装Apche服务
用yum 进行在线安装apche服务 yum install -y httpd 我这边是centos7 需要开启一下端口: 1 firewall-cmd --zone=public --add-por ...
- PTA(BasicLevel)-1094 谷歌的招聘
一.问题定义 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址, 而前面的网址是一个 10 位素数,这个素数 ...
- 基于MATLAB静态目标分割的药板胶囊检测
一.目标 1 将药板从黑色背景中分离(药板部分显示为白色,背景显示为黑色): 2 根据分割结果将药板旋转至水平: 3 提取药板中的药丸的位置信息: 二.方法描述 处理图像如下: (1)首先将图像转为灰 ...
- labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...
- SpringBoot接口 - 如何优雅的写Controller并统一异常处理?
SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,如何优雅的将参数校验的错误信息统一处理并封装返回呢?@pdai 为什么要优雅的处理异常 如果我们不统一的处理异常,经 ...
- 快来体验快速通道,netty中epoll传输协议详解
目录 简介 epoll的详细使用 EpollEventLoopGroup EpollEventLoop EpollServerSocketChannel EpollSocketChannel 总结 简 ...
- 【CSP-J 2021】总结
前言:程不在长,能过则行.码不在多,无虫则灵.斯是信竞,惟吾爆零.线段维护快,树状跳的勤.数论剩余系,图论前向星.无数竞之推理,无物竞之劳形.大佬楼教主,超奆姚期智,神犇云:您太强了. 早上5:00就 ...