博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)git checkout 撤销修改
阅读量:7238 次
发布时间:2019-06-29

本文共 3043 字,大约阅读时间需要 10 分钟。

背景:学习git相关命令

git撤销修改和版本回退

git status查看当前仓库的状态

liuzhipeng@exdroid43:~/pad/pad-test$ git status位于分支 master您的分支与上游分支 'origin/master' 一致。尚未暂存以备提交的变更:  (使用 "git add 
<文件>
..." 更新要提交的内容) (使用 "git checkout --
<文件>
..." 丢弃工作区的改动) 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/AuTutuTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/AuTutuVideoTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/LinpackTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/Mark3DTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/MobileXPRTTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/UiAssistant.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/VellamoTest.java 修改: PadTest2.0/testcase/AI030002-performance-3DMark.py

 

下面来解析git checkout的意思: git checkout --readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;(上一次的git commit 后,修改readme.txt 但没有执行git add,回到上一次的git commit后的结果)一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。(修改readme.txt,并且git add,然后又修改了readme.txt, 此时执行git checkout,回到git add 后的状态)总之,就是让这个文件回到最近一次git commit或git add时的状态。

 

场景分析

需求 ,现在我git add之后,但是我还想放弃git add,回到上一次git commit的状态,怎么办? (就是说撤销掉暂存区,回到工作区的状态)

分两步执行:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:$ git reset HEAD readme.txtUnstaged changes after reset:M       readme.txt

 

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。(HEAD^表示上一个版本,就是git log的第二次)

 Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

总结时间:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

 

  1. 已经用 git commit 提交了代码

  2. 使用git reset -h 可以查看git rest 帮助,git reset 有几个参数–mixed (默认) –soft –hard

  3. soft 参数:git reset –soft HEAD~1 或者git reset –soft HEAD^意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区 ,就是回到上面第2种情况,这个时候你的修改还在暂存区

  4. 默认的mixed参数:git reset HEAD~1 意为将版本库回退1个版本,将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到未暂存阶段就是工作区git add之前。

  5. hard参数:git reset –hard HEAD~1 意为将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本

  6. 。可以使用 git reset –hard HEAD^ 来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset –hard commitid

你可以使用 git log 命令来查看git的提交历史。git log 的输出如下,之一这里可以看到第一行就是 commitid,git log -3来查看最近三次的提交

转载地址:http://dzlfm.baihongyu.com/

你可能感兴趣的文章
App上线Check List
查看>>
广播接收者实现IP拨号
查看>>
关于mysql编码问题
查看>>
c++ typedef和#define的作用范围
查看>>
Ansible系列(七):执行过程分析、异步模式和速度优化
查看>>
正则表达式matcher.group用法
查看>>
TCP/IP(三)数据链路层~2
查看>>
使用Json让Java和C#沟通的方法
查看>>
小米路由Mini刷Breed, 潘多拉和LEDE
查看>>
tornado日志使用详解
查看>>
[Flume][Kafka]Flume 与 Kakfa结合例子(Kakfa 作为flume 的sink 输出到 Kafka topic)
查看>>
ajax的工作原理
查看>>
Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询
查看>>
IIC接口下的24C02 驱动分析
查看>>
fragmentTabHost 使用示例
查看>>
oop思维意识,类 模块命名空间,类扩展之继承 、组合、mixin三种模式
查看>>
让gcc和gdb支持intel格式的汇编
查看>>
Shell脚本8种字符串截取方法总结
查看>>
SQLServer------远程调用失败
查看>>
Module ngx_http_v2_module
查看>>