一、上堂回顾
1.vim编辑器
三种工作模式之间的切换
vim ---->a i --->esc,按下:,如果文件有改动则使用wq,如果没有改动,则使用q,则添加!强制退出
2.用户管理
注意:必须使用管理员的身份执行【root,普通用户使用sudo】
useradd -m
userdel
usermod
passwd
groupadd
groupdel【注意:只能删除空的用户组】
chmod 【字母法和数字法】
3、系统管理
kill
4.shell
/bin/bash
/bin/sh
二、shell编程
1.shell运算符
1.1基本运算符【算术,关系,逻辑】
expr:是一款表达式计算工具,能完成表达式的求值操作
代码演示:
#!/bin/bash val="2+2" echo ${val} val="expr 2+2" echo ${val} #expr使用功能,则需要结合反引号使用 val=`expr 2 + 2` echo ${val} #算术运算符 a=10 b=20 val=`expr $a + $b` echo ${val} #*必须使用\进行转义 val=`expr $a \* $b` echo ${val} #关系运算符 #if语句后面的条件需要用[]括起来,但是表达式的前后都需要有空格 #if-then-else-fi if [ $a -eq $b ] then echo "yes" else echo "no" fi #逻辑运算符 #逻辑运算符一般结合关系运算符使用 if [ 1 -lt 3 ] && [ 2 -gt 3 ] then echo "yes" fi
1.2文件测试运算符
代码演示:
#!/bin/bash path="/home/yangyang/Desktop/shell/math.sh" if [ -d $path ] then echo "yes" else echo "no" fi ~
2.echo、printf、test命令
2.1echo
用于字符串或者变量的输出
代码演示:
#!/bin/bash echo "this is a text" echo this is a text echo 'this is a text' #echo `this is a text` #显示转义字符 echo "\"this is a text\"" #显示变量 name="zhangsan" echo "his name is $name" #-e表示开启转义,\n表示换行,\c表示不换行,echo默认可以换行 echo -e "ok \n" echo -e "ok \c" echo "hello" #执行命令 echo `date`
2.2printf
注意:默认printf不会像echo自动换行,如果需要换行需要手动添加\n
printf比echo功能更加强大
代码演示:
#!/bin/bash printf "hello" #对数据进行格式化 printf "%-10s %-6s %-4s\n" 姓名 性别 体重 printf "%-10s %-6s %-4.2f\n" 小华 女 48.3253 printf "%-10s %-6s %-4f\n" jack 男 60.435 printf "%-10s %-6s %-4f\n" tom 男 100.24 printf "%-3s %-6s %-4f\n" bobbb 男 55.00
总结:
a.%s %d %f %c【character】都是占位符
b.%-10s,指的是一个长度最大为10 的字符串,-表示左对齐,没有-则表示右对齐,整体表示任何字符都会被显示在10个字符宽的范围内,如果不足则自动使用空格填充,如果超出则全部显示
c.%-4.2f:指的是格式化浮点型数据,其中,.2f表示保留小数点后2位
2.3test
用于检查某个条件是否成立,可以进行数值,字符和文件三个方面的检测
代码演示:
#!/bin/bash #数值检测 num1=100 num2=200 if [ $num1 -eq $num2 ] then echo "yes" else echo "no" fi if test $[num1] -eq $[num2] then echo "yes" else echo "no" fi ~
3.shell流程控制语句
3.1分支语句
代码演示:
#!/bin/bash #1.单分支 if [ 1 -gt 3 ] then echo "yes" fi #2.双分支 if [ 1 -gt 3 ] then echo "yes" else echo "no" fi #3.多分支 a=10 b=20 if [ $a -eq $b ] then echo "相等" elif [ $a -gt $b ] then echo "大于" elif [ $a -lt $b ] then echo "小于" else echo "不符合条件" fi ~
3.2循环语句
代码演示:
!/bin/bash #1.需求:输出给定的所有的数字 for num in 1 2 3 4 5 do echo "the value is $num" done #2.需求:输出字符串中的字符 s="hello" for str in s do echo $str done #3.需求:输出数组中的所有的元素 arr=(22 33 44) for x in ${arr[*]} do echo $x done #需求:输出数字1~5 n=1 while [ $n -le 5 ] do echo $n #n=$[$n+1] let "n++" done #需求:求1~10之间所有整数的和 i=1 sum=0 while [ $i -le 10 ] do sum=$[$sum+$i] let "i++" done echo $sum #until j=1 until [ $j -gt 10 ] do echo $j ((j++)) done
4.shell函数
代码演示:
#!/bin/bash #1.午参悟返回值 #定义函数 check(){ echo "hello" } #调用函数 check #2.有返回值 func1(){ echo "请输入第一个数:" read num1 echo "请输入第二个数:" read num2 #echo "两个数的和是:" return $(($num1+$num2)) } func1 echo "两个输入的数的和是:$?" #3.有参有返回值 func2(){ echo $1 echo $2 return 123 } func2 11 22 echo $?
三、git的使用
1.git简介
git svn
如果你用Word写过毕业论文,那你一定有这样的经历:
想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。
看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。
更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。
于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本 文件名 用户 说明 日期 1 service.doc 张三 删除了软件服务条款5 7/12 10:38 2 service.doc 张三 增加了License人数限制 7/12 18:09 3 service.doc 李四 财务部门调整了合同金额 7/13 9:51 4 service.doc 张三 延长了免费升级周期 7/14 15:17 这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
1.2git的由来
很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了
1.3集中式和分布式
svn:集中式的版本控制系统
git:分布式的版本控制系统
集中式:版本是存放在中央服务器上的,【缺点:必须联网才能工作】
分布式:没有中央服务器,每个人的电脑上都有一个完整的版本库【项目】【优点:不需要联网就可以工作,如果其中的一个人改动了文件,只需要将改动的部分推送给对方】,git中有分支管理
2.安装git
sudo apt-get install git
演示命令: yangyang@yangyang-virMachine:~$ sudo apt-get install git [sudo] yangyang 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 git 已经是最新版 (1:2.16.2-0ppa1~ubuntu16.04.1)。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 157 个软件包未被升级。
3.创建版本库
3.1什么是版本库
版本库也被叫做仓库,repository,初期理解为一个目录,这个目录里面的所有的内容都可以被git管理,每个文件的修改,删除,增加文件或者删除文件,git都可以追踪,以便任何时刻都可以追踪改动,或者在将来某个时刻可以还原
3.2创建版本库
步骤:创建一个普通目录【mkdir 目录名】
初始化仓库【git init】
注意:在目录下将出现一个.git的隐藏目录,标记当前的目录就是一个仓库,可以进行追踪仓库中任何的变化【可以跟踪管理版本库】
演示命令: yangyang@yangyang-virMachine:~$ cd Desktop/ yangyang@yangyang-virMachine:~/Desktop$ mkdir python1804 yangyang@yangyang-virMachine:~/Desktop$ ls python1804 shell text.sh yangyang@yangyang-virMachine:~/Desktop$ cd python1804/ yangyang@yangyang-virMachine:~/Desktop/python1804$ pwd /home/yangyang/Desktop/python1804 yangyang@yangyang-virMachine:~/Desktop/python1804$ git init 已初始化空的 Git 仓库于 /home/yangyang/Desktop/python1804/.git/ yangyang@yangyang-virMachine:~/Desktop/python1804$ ls -a . .. .git
3.3把文件添加到仓库
明确一点:任何的版本控制系统,其实都只能追踪文本文件的改动,实质上追踪的是改动【删除一个文件属于一个改动,增加一个文件也属于一个改动,向文件中添加内容也属于 一个改动。。。。。】
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ touch text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "create a new file text.txt and init" *** 请告诉我你是谁。 运行 git config --global user.email "[email protected]" git config --global user.name "Your Name" 来设置您账号的缺省身份标识。 如果仅在本仓库设置身份标识,则省略 --global 参数。 fatal: 无法自动探测邮件地址(得到 'yangyang@yangyang-virMachine.(none)') yangyang@yangyang-virMachine:~/Desktop/python1804$ git config --global user.email "[email protected]" yangyang@yangyang-virMachine:~/Desktop/python1804$ git config --global user.name "yangyang-git" yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "create a new file text.txt and init" [master(根提交) b80fd54] create a new file text.txt and init 1 file changed, 1 insertion(+) create mode 100644 text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt ' > ^C yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "add abc" [master 19a9faa] add abc 1 file changed, 1 insertion(+) yangyang@yangyang-virMachine:~/Desktop/python1804$ touch check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ vim check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "modify check and text" [master 6846a1d] modify check and text 2 files changed, 2 insertions(+) create mode 100644 check.txt
git add filename :添加改动 git commit -m "xxxx" :提交到git 每一次add可以添加一次改动,执行add多次则表示增加多次改动,commit只需要执行一次,一次性将所有的改动全部提交给git -m;表示每一次提交的提交日志,可以输入任意内容,当然最好是有意义的,好处:可以从历史版本中找到需要的某个版本
4.时光穿梭机【覆水可收】
可以回退版本
1>git status 查看仓库当前的状态【时刻掌握仓库的状态,当没有任何文件需要提交时,是干净的工作区】
2>git diff 查看具体修改的内容
如果对本地的某个文件做了修改,但是还没有add,则通过git diff就可以查看本地文件和仓库之间的差异,当修改被add之后,再查看差异则没有任何输出
yangyang@yangyang-virMachine:~/Desktop/python1804$ vim check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: check.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git add check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "4364" [master 969cf64] 4364 1 file changed, 1 insertion(+) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区 yangyang@yangyang-virMachine:~/Desktop/python1804$ git diff check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ vim check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git diff check.txt diff --git a/check.txt b/check.txt index 316b0ad..bf65706 100644 --- a/check.txt +++ b/check.txt @@ -1,2 +1,3 @@ 46337 date +2018.9.7 yangyang@yangyang-virMachine:~/Desktop/python1804$ git add check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git diff check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "fhfh" [master 0da4f31] fhfh 1 file changed, 1 insertion(+) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区
4.1版本回退
不断对文件进行修改,然后不断提交到版本库里
当一个文件修改到某个程度的时候,就可以保存一个快照,这个快照在git被称为commit
git log 查看git的工作日志【提交记录】
需求:回退到上一个版本
问题:要回退版本,git必须要知道回到哪个版本
解决办法:在git中,用HEAD表示当前版本,上一个版本使用HEAD^,上上一个版本则使用HEAD^^,如果要回退到的版本比较久远,则使用commit id
命令:git reset --hard HEAD^ 回退到最近的一个版本【--hard能够使得版本回退到最近的一个版本】
工作原理:git之所以能够进行版本回退,因为在git的内部有一个指向当前版本的HEAD指针,当你回退版本的时候,git将HEAD指针的指向发生了一个改变,指向了最近的一个版本
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ git log --pretty=oneline #查看版本提交记录 0da4f317b9f97469e3a493107228a09b3c97581c (HEAD -> master) fhfh 969cf64f99c9584d0206d0df70d5a157dff69a4c 4364 6846a1dbf48675a96c28f93c52032c604b50de6f modify check and text 19a9faa7f0c2a9bf861267562d6d69afe077d6d4 add abc b80fd54fac6981ad35909ca08fbb0b8e319d2ce7 create a new file text.txt and init yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区 yangyang@yangyang-virMachine:~/Desktop/python1804$ cat check.txt 46337 date 2018.9.7 yangyang@yangyang-virMachine:~/Desktop/python1804$ cat text.txt hello abc 46343 yangyang@yangyang-virMachine:~/Desktop/python1804$ git reset --hard HEAD^ #回退到最近的一个版本 HEAD 现在位于 969cf64 4364 yangyang@yangyang-virMachine:~/Desktop/python1804$ car check.txt 程序“car”尚未安装。 如需运行 'car',请要求管理员安装 'ucommon-utils' 软件包 yangyang@yangyang-virMachine:~/Desktop/python1804$ cat check.txt 46337 date yangyang@yangyang-virMachine:~/Desktop/python1804$ git log --pretty=oneline 969cf64f99c9584d0206d0df70d5a157dff69a4c (HEAD -> master) 4364 6846a1dbf48675a96c28f93c52032c604b50de6f modify check and text 19a9faa7f0c2a9bf861267562d6d69afe077d6d4 add abc b80fd54fac6981ad35909ca08fbb0b8e319d2ce7 create a new file text.txt and init yangyang@yangyang-virMachine:~/Desktop/python1804$ git reset --hard 0da4f317 #通过commit id回到某个指定的版本,commit id是唯一的 HEAD 现在位于 0da4f31 fhfh yangyang@yangyang-virMachine:~/Desktop/python1804$ cat check.txt 46337 date 2018.9.7 yangyang@yangyang-virMachine:~/Desktop/python1804$ git reflog #查看git的提交记录,可以获取过去和未来的所有的版本 0da4f31 (HEAD -> master) HEAD@{0}: reset: moving to 0da4f317 969cf64 HEAD@{1}: reset: moving to HEAD^ 0da4f31 (HEAD -> master) HEAD@{2}: commit: fhfh 969cf64 HEAD@{3}: commit: 4364 6846a1d HEAD@{4}: commit: modify check and text 19a9faa HEAD@{5}: commit: add abc b80fd54 HEAD@{6}: commit (initial): create a new file text.txt and init
总结:
a.HEAD默认指向的版本是当前版本,git允许我们在不同的版本之间进行穿梭,使用命令git reset --hard commit_id
b.穿梭前,使用git log可以查看提交的历史,以便于确定需要穿梭到哪个版本
c.要重返未来,用git reflog查看命令历史,以便于确定需要回到未来的哪个版本
4.2工作区和暂存区
工作区:working Directory,就是在电脑上能看见的目录,举例:python1804
版本库:Repository,工作区内有一个隐藏目录.git,就是git的版本库
暂存区:是一个抽象的概念
将文件提交到版本库分为两步:
git add xxx:将文件的改动添加到暂存区
git commit -m "xxx";将暂存区中所有的改动提交到版本库中的当前分支
创建git版本库时,git会自动为我们创建唯一一个分支master分支,所以,每次将改动提交给了master分支【主分支】
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt #在工作区中工作 yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: text.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt #添加到暂存区 yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "add zhangsan" #提交到版本库的master分支 [master 1d235bf] add zhangsan 1 file changed, 1 insertion(+), 1 deletion(-) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区
4.3管理修改
在一个文件中新增了一行,这时一个修改
删除了一行内容,这是一个修改
更改了某些字符,这是一个修改
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "on my god" [master c799364] on my god 1 file changed, 1 insertion(+) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: text.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git diff HEAD -- text.txt diff --git a/text.txt b/text.txt index a12c65b..d02f0f4 100644 --- a/text.txt +++ b/text.txt @@ -1,4 +1,4 @@ hello zhangsan -abc +def 46343 on my god yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "def" [master 4970717] def 1 file changed, 1 insertion(+), 1 deletion(-) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区 yangyang@yangyang-virMachine:~/Desktop/python1804$ git diff HEAD -- text.txt
4.4撤销修改
第一种情况:修改了文件,但是还没有添加到暂存区
git checkout -- 被修改的文件
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: text.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git checkout -- text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ cat text.txt hello zhangsan def 46343 on my god
第二种:修改了文件,添加到了暂存区,但是还没有提交到版本库
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git reset HEAD text.txt 重置后取消暂存的变更: M text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: text.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git checkout -- text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ cat text.txt hello zhangsan def 46343
第三种:修改了文件,直接提交到了版本库
yangyang@yangyang-virMachine:~/Desktop/python1804$ vim text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git add text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "fhdf" [master 1cd49a3] fhdf 1 file changed, 1 insertion(+) yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区 yangyang@yangyang-virMachine:~/Desktop/python1804$ git reset --hard HEAD^ HEAD 现在位于 4970717 def yangyang@yangyang-virMachine:~/Desktop/python1804$ cat text.txt hello zhangsan def 46343 on my god
总结:
a.如果修改了工作区中的某个文件,向直接丢弃工作区的改动,用命令git checkout -- file
b.如果修改了工作区中的某个文件,还添加到了暂存区,向丢弃修改,分为两步:第一步:使用命令git reset HEAD file撤销了add,然后命令git checkout -- file撤销工作区的修改
c.如果修改了工作区中的某个文件,还提交到了版本库,只需要回退版本即可
4.5删除文件
步骤:
第一步:删除工作区中的文件【rm file】
第二步:删除版本库中的文件【git rm file】
演示命令: yangyang@yangyang-virMachine:~/Desktop/python1804$ rm check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ ls text.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add/rm <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 删除: check.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") yangyang@yangyang-virMachine:~/Desktop/python1804$ git rm check.txt rm 'check.txt' yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 删除: check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git commit -m "delete check.txt" [master 91114f4] delete check.txt 1 file changed, 3 deletions(-) delete mode 100644 check.txt yangyang@yangyang-virMachine:~/Desktop/python1804$ git status 位于分支 master 无文件要提交,干净的工作区