Linux-学习笔记-04

一、上堂回顾

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
无文件要提交,干净的工作区

猜你喜欢

转载自blog.csdn.net/weixin_42569562/article/details/82670382