备注:

本文参考于廖雪峰老师的博客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. 使用ansible实现批量免密认证

    一.目的 批量实现免密认证,适合管理大批量机器使用 二.步骤 1-1.第一种方式:收集被控制主机的公钥,用于构建并验证ssh_known_hosts # ssh-keyscan 10.246.151. ...

  2. pikachu 搭建

    一:首先下载XAMPP 1.先到官方网站安装XAMPP  https://www.apachefriends.org/zh_cn/index.html 选择适合自己的电脑系统下载,本次windows系 ...

  3. [CentOS 7]挂载ntfs格式U盘

    在我们将U盘插入装有CentOS的系统时,经常会出现如图所示的错误提示.这是因为linux系统并不能兼容NTFS的文件系统.其解决方法如下(建议先进入root模式): 1.首先下载"ntfs ...

  4. Jmeter服务器监控技术

    meter-plugins.org推出了全新的Plugins Manager,对于其提供的插件进行了集中的管理, 将 ServerAgent-xxx.jar上传被测服务器解压 进入目录 ServerA ...

  5. 容器技术之Docker-swarm

    前文我聊到了docker machine的简单使用和基本原理的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13160915.html:今天我们来聊一聊d ...

  6. Spring声明周期的学习心得

    我们首先来看下面的一个案例: 这里是 HelloWorld.java 文件的内容: package com.yiibai;    public class HelloWorld {   private ...

  7. 使用TimerTask创建定时任务

    使用TimerTask创建定时任务,打包之后应用于linux系统 step1:创建java项目 step2:代码实现 定时任务实现类CreateTask.java是打印操作者的名字 配置准换类Conf ...

  8. jmeter在non-GUI模式下用法

    用法 jmeter -n -t HTTPRequesttest.jmx -l testHistory/testResult.jtl -e -o testHistory/testReport 参数说明 ...

  9. 入门大数据---Spark开发环境搭建

    一.安装Spark 1.1 下载并解压 官方下载地址:http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载: 解压 ...

  10. Flutter轮播图

    前端开发当中最有意思的就是实现动画特效,Flutter提供的各种动画组件可以方便实现各种动画效果.Flutter中的动画组件主要分为两类: 隐式动画控件:只需设置组件开始值,结束值,执行时间,比如An ...