备注:

本文参考于廖雪峰老师的博客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. turtle绘制彩色螺旋线

    代码实现: #绘制彩色螺旋线 import turtle import time turtle.pensize(2) turtle.bgcolor("black") colors ...

  2. sockaddr_in与sockaddr区别

    先粘代码 struct sockaddr { __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ char s ...

  3. UWP实现第二字幕并且跟随系统的设置

    话不多说,先看一下最终效果 系统设置默认 在系统设置里面更改字幕的显示效果 需求 要求播放器可以显示第二字幕,类似旁白的文字解释.比如片中出现了一个专业术语,这个时候观众可能有些疑惑.所以需要在屏幕上 ...

  4. vc6.0的项目如何在整个项目中查询内容呢?试试vs2015

    vc6.0的项目如何在整个项目中查询内容呢?试试vs2015 https://blog.csdn.net/txwtech/article/details/101308795

  5. laravel Excel 导入

    <?php namespace App\Modules\Live\Http\Controllers; use Illuminate\Http\Request; use Maatwebsite\E ...

  6. Flask01-HelloWorld

    # flask学习 参考:http://www.pythondoc.com/flask-mega-tutorial/ ## python3. 默认支持虚拟环境使用(用最简单的方法,解决问题) wget ...

  7. shell基本正则表达式

    基本正则表达式 星号* 匹配它前面的字符串或正则表达式任意次(包括0次).比如,“1122*” 将匹配11+1个或多个2,其可能匹配的字符串将是112.1122.112222.11223343等 句点 ...

  8. matlab批量处理数据的方法

    问题描述: 有多个.mat格式数据(本文数据名称:‘buf_026.mat’),要抽取其中的数据进行运算,结果返回到数组/xlsx等 关键字:num2str/ xlsxwrite/ eval/ 元胞数 ...

  9. JavaScript基础避免隐式的类型转换(004)

    JavaScript在普通对比运算符“==”执行时可能会进行隐式的类型转换.比如:false==0和""==0的结果都是true.同理也适合于"!="运算符.要 ...

  10. Orleans 框架3.0 官方文档中文版系列一 —— 概述

    关于这个翻译文档的一些说明: 之前逛博客园的时候,看见有个园友在自己的博客上介绍Orleans. 觉得Orleans 是个好东西. 当时心想:如果后面有业务需要的时候可以用用Orleans框架. 当真 ...