基本都是按照廖雪峰老师的重新敲打了一遍,增强记忆,中间穿插了一些自己的理解,新手可能有误,请看原版:

https://www.liaoxuefeng.com/wiki/896043488029600/896954074659008

时光机穿梭

上一张已经可以使用git add和git commite 添加文件到Git 仓库,这一章主要讲述如何使用git来管理仓库中的文件。

当使用 vi file1.txt 改动txt文件后,可使用git status命令来查看仓库的状态。

$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   file1.txtno changes added to commit (use "git add" and/or "git commit -a")

以上是git status命令返回的结果,可看到file1.txt文件被修改,但是没有被添加or提交。

可使用git diff <file1.txt>命令来查看具体修改了什么内容

$ git diff file1.txt
diff --git a/file1.txt b/file1.txt
index 7a5e08f..c595d7d 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1,3 +1,5 @@This is file 1Hello
-Hello
\ No newline at end of file
+Hello
+This hello is by Git vi command
+what the matter?

以上可以看到file1.txt加了三行。知道了file1.txt修改了什么后就可以使用git add 和 git commit -m提交到仓库。使用insert键来更改txt文件,使用Esc键加:wq退出并保存

$ git add file1.txt$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   file1.txt上面使用git add提交file1.txt,从git status可看到将被提交的修改包括file1.txt$ git commit -m "add hello"
[master 963b043] add hello1 file changed, 3 insertions(+), 1 deletion(-)$ git status
On branch master
nothing to commit, working tree clean重新提交仓库可看到一个文件被改变,增加了3行,删除了一行
此时用git status查看状态可考到当前没有需要提交的修改,工作目录是working tree clean

小结:

  • 使用git status命令随时掌握工作区状态
  • 如果git status显示被修改过,可使用git diff查看具体被修改的内容。

版本回退

不断对文件进行修改,又不断提交修改到版本库。每当你觉得文件修改到一定程度时,可以先使用commit提交一个版本,如果后面把代码改乱了,可以回退到最近commit的一个版本。

使用git log 命令查看版本历史记录。

$ git log
commit 963b043ca09db1ca1aadc0cdc758b0a189ef48b7 (HEAD -> master)
Author: A <bbb@qq.com>
Date:   Wed Dec 23 15:02:18 2020 +0800add hellocommit 1bf646e21317a16a83003b83bd0b752b23abacd1 (这一大串为提交的版本号,十六进制表示)
Author: A <bbb@qq.com>
Date:   Tue Dec 22 16:42:14 2020 +0800create 2 filescommit b2525be4ea024a526871b545b0f0d8db45592337
Author: A <bbb@qq.com>
Date:   Tue Dec 22 16:28:45 2020 +0800wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到三次提交。
如果觉得信息太多,不需要了解Author和Date,可以在原命令上加入 --pretty=oneline
git log --pretty=oneline

没提交一个新版本,Git会自动串成一个时间线,可使用可视化工具查看Git历史。

怎么回退到上一个版本?

以git log输出的三个版本为例,我们怎么回滚到 create 2 files版本?

Git必须知道当前版本是哪个版本?使用HEAD表示当前版本。上一个版本是HEAD^
上上个版本是HEAD^^
有多个版本回滚时可使用数字HEAD~100

使用git reset命令回退到某个版本。
git reset --hard HEAD^

现在使用git reset回到了create 2 files版本,现在若又想回到add hello的版本怎么办呢?可以使用以下代码:
git reset --hard 963b043 (963b043是add hello的版本号前几位,Git会根据这个版本号自动查找)

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你使用git reset时,是将指针指向了其他的版本。如果跟上面一样,回退了某版本后后悔了又想恢复新版本怎么办?现在需要找到Commit id。
使用 git reflog来记录每一次命令。

总结:

  • HEAD指向的版本是当前版本。Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要会回退到哪个版本
  • 要重返未来,使用git reflog查看命令历史,以便确定要回到未来哪个版本。

工作区和暂存区

工作区

工作区指的是在电脑中.git所在的目录,即这个git仓库正在监控的工作区(文件夹)

版本库

工作区中的.git目录是Git的版本库。.git中存储了很多东西,其中有个叫做stage(index)的暂存区,还有Git自动创建的第一个分支master,和指向master的一个指针HEAD

PS:在Git Hash 中可看到每句开头都是这样,都会指向一个master:

thx@ASUS-PC MINGW64 /d/Git (master)

把文件往Git版本库中提交时两个步骤:
①git add file1.txt
将file1.txt的文件添加进stage暂存区

②git commit -m “add hello”
将“add hello”的修改提交,即把暂存区的所有内容提交到当前master分支。

之前讲过可以使用git add命令多次添加,然后使用一个git commit命令提交。其实就是把所有文件都放在暂存区,再一次性提交所有更改。

【实操】
使用vi file1.txt增加一行内容。同时使用vi nexfile.txt新增一个txt文件,此时使用git status命令查看工作区状态

$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   file1.txt
以上说明file1.txt被修改了,但是还没有从stage被提交Untracked files:(use "git add <file>..." to include in what will be committed)newfile.txt
因为newfile.txt没被git add提交过,所以现在仍然处于Untracked的状态

使用git add重新提交上述两个文件,用git status查看一下

$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   file1.txtnew file:   newfile.txt

暂存区的状态变为这样:

一旦提交后,如果没有对工作区做任何修改,则工作区就是working tree clean干净状态的。
此时版本库变成这样,暂存区被释放

管理修改

Git跟踪并管理的是修改,而不是文件。

当使用git add命令后,工作区的修改就被放入暂存区准备提交,若此时再对工作区进行二次修改,但并没有放入暂存区,使用git commit只会把在暂存区的文件提交。
可以使用git diff查看现有工作区和版本库已经被提交的最新版本的区别。

每次改动如果不用git add加入缓存区,就不会通过commit加入到版本库中。

撤销修改

使用git checkout – 来丢弃工作区的修改,有两种情况:
①file.txt修改后还没有放到暂存区,git checkout就回到和版本库一模一样的状态。
②file.txt的更改已经被添加到暂存区,git checkout就回到添加到暂存区后的状态。

总之,git checkout让文件回到最后一次git commit或者git add的状态。
注意撤销修改命令git checkout后的–很重要。
cat file1.txt可以在界面显示txt文件。

Q:若更改的内容已经到暂存区,怎么把暂存区的修改撤销掉(unstage)呢?
A:使用 **git reset HEAD **可以把暂存区的修改撤销掉,重新放回工作区。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当使用HEAD是,表示使用最新的版本。(因为HEAD是指针,永远指向最新版本)

删除文件

可以直接在文件管理器中把没用的文件删了,或者使用rm命令。
rm file1.txt

Git知道你删除了文件,工作区和版本库就不一致了。git status命令会立刻告诉你哪些文件被删除了。

①若要从版本库中删除该文件,则用命令 git rm,并且提交 git commit
git rm file1.txt
rm ‘test.txt’
git commit -m “remove test.txt”

②若删错了,版本库中还有,则使用checkout中把它恢复到最新版本。
git checkout --file1.txt
git checkout是用版本库中的版本替代工作区的版本,无论工作区是修改还是删除,都可以一键还原。

廖雪峰Git学习笔记2-时光机穿梭相关推荐

  1. 廖雪峰Git学习笔记(上)

    据廖老师git教程有所改动 一.git及相关概念 Git及版本控制系统 Git:用C语言开发的分布式版本控制系统 DVCS (Distributed Version Control System) 1 ...

  2. 廖雪峰Git学习笔记1-Git简介

    Git的诞生 Linus用C语言写的一个分布式版本控制系统.2008年,Github网站上线,为开源项目免费提供Git存储. 集中式VS分布式 分布式版本控制系统没有"中央服务器" ...

  3. 廖雪峰git学习资料-涂改笔记

    注意: 本文章是看廖雪峰官网资料整理而来原地址如下: http://www.liaoxuefeng.com/ 附件为git常用命令 前言: 注意的问题 如果是首次提交会第一步:先在本地建立一个一样的仓 ...

  4. 廖雪峰Git教程笔记与总结 -- Git简介、常用命令、分支管理

    本文主要用于记录阅读Git教程 - 廖雪峰的官方网站后的一些心得笔记,并且对git一些常用命令做一个整理总结. 本文要点分为:1.Git简介:2.Git常用命令:3.Git分支管理. 一.Git简介 ...

  5. 廖雪峰git读书笔记--添加远程库

    最近又看了看廖雪峰的git教程,在看"添加远程库"这一节时遇到问题,谨记之. 添加远程库超时 在看"添加远程库"这一节时遇到问题, 我先输入 $ git rem ...

  6. javaScript——廖雪峰老师学习笔记(一)

    1.要查看一个变量的内容,在Console中输入console.log(a);,回车后显示的值就是变量的内容. 2.alert('我不想执行'); //提示框谷歌浏览器可直接执行 3.JavaScri ...

  7. 廖雪峰python学习笔记之高级特性

    写在前面 寒假时本科舍友的一句话点醒梦中人-你的python基础还没弄明白吧!猛地一想好像确实如此,还停留在随插随用的程度,并且对于迭代器,函数式编程等等,没有深刻理解,所以项目做起来也是空中楼阁,所 ...

  8. 廖雪峰Python学习笔记1

    Python基础 文章目录 一.基础语法规范 二.数据类型 三.字符串与编码 四.条件判断 五.循环 一.基础语法规范 1.用#作为代码注释 2.当语句以冒号:结尾时,缩进的语句视为到麻花,缩进**使 ...

  9. 【廖雪峰Python学习笔记】错误、调试、测试

    文章目录 错误处理 调试 单元测试unitcase 文档测试 错误类型 程序编写问题bug – 字符类型错误等 用户输入错误 – 输入不符合规定的字符串 异常,程序运行时无法预测 – 磁盘满了,无法写 ...

最新文章

  1. c++ 界面交互影响处理代码执行速度_原创 | 某SCADA的远程代码执行漏洞挖掘与利用...
  2. map中只有一个值 获取_小学数学,为什么一个三角形中最多只有一个直角或一个钝角...
  3. 《浅谈架构之路:前后端分离模式》
  4. Object o = new Object()在内存中占几个字节
  5. 软件配置管理(三)软件配置管理核心功能
  6. python中定义一个空的字符串_04python—15种字符串操作
  7. error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.
  8. 压力测试实践一:JMeter + JProfiler 入门
  9. python进阶学习笔记(四)--多线程thread
  10. 模板 n维矩阵的二分幂
  11. 过滤器在图纸上的符号_看不懂电气图纸?资深级老师傅教你如何识图,学会后受用一生...
  12. 迭代重心法 matlab,重心法
  13. 深度可分离卷积vs标准卷积
  14. 姜汝祥是个骗子吗_我是个骗子你是?
  15. 项目构建工具--webpack
  16. PyQt5,一个好的qt教程。
  17. HDU 2121 Ice_cream’s world II(最小树形图+虚根)
  18. 登链钱包(一款功能强大的以太坊钱包)完全开源
  19. Windows11打开任务管理器的方式
  20. 探讨Linux CPU的上下文切换原由

热门文章

  1. javascript 正则表达式 字符串 如何匹配 单个 反斜杠
  2. ffmpeg在线文档
  3. iOS 导入Charts 及工程配置
  4. np.argsort() 与 array.argsort()
  5. WebGL入门(十九)-三维视图通过调整正射投影矩阵/盒状可视空间实现三角形的显示与消失
  6. 鹏业云计价i20“新数据标准接口V2.0”投标报价编制
  7. 韶关实验室设计要点汇总
  8. 制作企业宣传片的意义。
  9. Docker集成kata containers
  10. 转贴:一个理发店的整合营销