备注:

本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

知识点

  • Git跟踪和管理的的是修改,而不是文件

  • git checkout -- file,会将文件撤销到和git add时的状态一样,即git checkout -- file会将工作区的文件撤销到与暂存区(stage)一致

  • git checkout -- file命令中,如果没有--,就变成了“切换到另一个分支”的命令

  • git reset HEAD file既可以回退版本,也可以把添加到暂存区的修改回退到工作区,HEAD表示最新版本

  • 删除文件,git rm file,git commit -m"..."

管理修改

Git不同于其他版本控制系统,Git跟踪和管理的的是修改,而不是文件

新增一行、删除一行、修改字符、删除又增加内容、创建新文件等,都是修改

Git通过提交放入暂存区的修改,用来管理修改,而不是管理原文件。

撤销修改

在实际中,(虽然不常发生)总是会出现发生一些问题需要撤销修改。

  • 比如:在文件中添加一行无意义的特殊字符
liu@liu-virtual-machine:~/gitTest$ cat readme.txt

`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file
$%^%&^*&&(**)(*)*&^*(*&&*&YTRYYIN

没有git add添加到暂存区时的撤销

  • 此时,查看git status如下:
liu@liu-virtual-machine:~/gitTest$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
  • Git提示,git checkout -- file可以丢弃工作区的改动
git checkout -- readme.txt

git checkout -- readme.txt会把readme.txt文件在工作区的修改全部撤销。

git checkout -- file,会将文件撤销到和git add时的状态一样,即git checkout -- file会将工作区的文件撤销到与暂存区(stage)一致

git checkout -- file作用在暂存区(stage),当git add添加到暂存区后,git status不在显示git checkout -- file命令提示

可自行测试

  • 此时文件内容就回到了原来状态
$ cat readme.txt

`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file

git checkout -- file命令中,如果没有--,就变成了“切换到另一个分支”的命令

git add添加到暂存区后的撤销

当我们git add后,发现需要撤销,此时查看git status状态

$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 修改: readme.txt

Git提示,使用 git reset HEAD file可以把添加到暂存区的修改撤销(unstage

$ git reset HEAD readme.txt
重置后取消暂存的变更:
M readme.txt
  • git reset 既可以回退版本,也可以把添加到暂存区的修改回退到工作区,HEAD表示最新版本

  • 此时查看git status,暂存区没有修改,是干净的,工作区有修改。

$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
  • 现在可以使用git checkout -- readme.txt丢弃工作区的修改。然后查看,修改的文件已经回到原来状态
$ git checkout -- readme.txt
$ cat readme.txt `this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file

撤销成功

git commit提交后的撤销

对于已经commit提交到版本库的撤销,可以使用版本回退更改。

如果你提交了远程仓库,则需要另行处理。

删除文件

Git中,删除也是一个修改操作.

首先新建一个test.txt文件,添加并提交到仓库

  • 当我们把目录下的文件删除后
$ rm test.txt
  • 此时,工作区和版本库变得不一致
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 删除: test.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

git status指出删除了test.txt文件。

  • 现在有两种操作:1、确定从版本库中删除文件,2、从暂存区把误删的文件恢复

确定从版本库中删除文件

  • 使用git rm删除文件并git commit提交
$ git rm test.txt
rm 'test.txt'
$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 删除: test.txt $ git commit -m"remove test.txt"
[master 6a0f133] remove test.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test.txt
$ git status
位于分支 master
无文件要提交,干净的工作区

从暂存区把误删的文件恢复

  • 使用git checkout -- file从暂存区恢复误删的文件(本质还是丢弃工作区的改动)
$ git checkout -- test.txt

Git管理修改、撤销和删除文件的更多相关文章

  1. git 学习之撤销和删除

    在实际的工作和学习中我们经常的会对文件进行修改,但是或多或少的就会发现由于某些原因修改是错误的这时候就需要对所做的修改进行撤销,更或者某些时候需要对文件进行删除.本节就会告诉大家如何操作. 撤销操作 ...

  2. Git管理修改、撤销修改、删除文件

    什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. a.管理修改 对于提交修改, ...

  3. GIT 管理修改、删除文件

    管理修改 现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就 ...

  4. Git ~ 管理修改 ~ Gitasd

    现在假设你一经常我了暂存区的概念 , 下面我们将要讨论的就是 , 为什么 Git 比其他的版本控制系统设计的优秀 , 因为 Git 跟踪管理的是修改而非文件 什么是修改  ? 修改就是 你在某个地方 ...

  5. git管理修改

    为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改 ...

  6. Git(管理修改)

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  7. 三、git管理修改

    一.修改提交 如下图,Git分工作区和版本库(.git隐藏目录中). 在每次修改后 git add "file name" 其实是把修改内容提交到本地版本库的 暂存区(stage) ...

  8. git 管理和存储二进制大文件

    git 管理二进制文件 本文档将逐步带你体验 git 的大文件管理方式. 环境: windows10 64位 cmd git版本: git version 2.18.0.windows.1 创建到推送 ...

  9. 如何在linux下使用git管理上传代码&误删文件修复

    首先需要安装git,sudo apt-get install git,这时就可以下载代码了. 然后先在gituhub上新建一个仓库,然后先在本地建一个git目录,git init 然后再配置用户名和邮 ...

随机推荐

  1. qt解决release后数据库连接不上的问题

    问题 : 明明已经设置了 "./xxx" , 为什么release之后数据库还是连不上呢 解决 : 项目中建立一个plugins文件夹 将qt安装目录下的sqldrivers复制到 ...

  2. Selenium上传文件方法大全

    最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...

  3. Elasticsearch原理入门

    这是一篇拼接贴,我是缝合怪 项目中用到了es,使用方法是挺简单的,封装了基本api以后,把查询条件封装一下传给client执行就可,但是光使用比较肤浅,研究一下原理和本质,更利于以后开发使用 扫盲贴 ...

  4. [问题解决]coding时修改代码键入前边后边的自动删除

    问题原因:误按下键盘上的Insert键 解决办法:再按一下即可

  5. phpmyadmin通过慢查询日志getshell连载(二)

    这是phpmyadmin系列渗透思路的第二篇文章,前面一篇文章阐述了通过全局日志getshell,但是还有一个日志可以getshell,那就是本次实验的慢查询日志,操作类似,毕竟实战中多一条路就多一次 ...

  6. jmeter在Windows下安装(含插件安装)

    [准备环境] jdk1.8 jmeter的安装包下载 [步骤] 1 把下载下来的压缩包解压,点击jmeter.bat 启动,启动后是英文界面 2 修改默认的英文界面,打开jmeter.properti ...

  7. RabbitMQ:四、跨越集群

    跨越集群主要两种插件:Federation和Shovel. 原来的rabbitmq集群将多个broker将多个节点连接起来组成逻辑上独立的单个broker,但是集群也有其局限性:集群内部借助 Erla ...

  8. curl模拟调用接口

    curl模拟调用接口 1. get请求 curl -i -X GET http://url/bind/agentOnWork/v2?Sig=******* 2. post请求(带头信息以及参数) cu ...

  9. ECSHOP 2.5.1 二次开发文档【文件结构说明和数据库表分析】

    ecshop文件架构说明 /* ECShop 2.5.1 的结构图及各文件相应功能介绍 ECShop2.5.1_Beta upload 的目录 ┣ activity.php 活动列表 ┣ affich ...

  10. Mariadb之事务隔离级别

    上一篇我们聊到了mariadb的锁,以及怎么手动加锁和解锁等等,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13196905.html:今天我们来聊一聊mar ...