在开始今天的内容之前,我们先来快速回顾一下前面讲到的知识。

我们要用 Git 来管理你的项目,首先需要先拥有一个项目,首先创建一个 文件夹 MyProject 作为你的基地,然后来到 CMD 命名行窗口,切换到项目的位置,执行 git init ,初始化 Git 仓库,然后在文件夹就出现了 一个 .git 的隐藏文件夹,里面存放的数据是用于跟踪你工作目录中文件的变化的。这里的 MyProject 就是你的工作目录,第一棵树。

接下来,我们在工作目录添加一个 README.md 文件,在里面随便写点内容,保存为 UTF-8 编码格式(保证兼容性),然后在 cmd 输入 git add README.md ,将 README.md 文件添加到暂存区域,添加到暂存区域只是让 git 跟踪这个文件,如果成功了,不会有任何提醒。

最后一个步骤,执行 git commit -m "add a README file",大家会看到一个反馈。

有的同学就要问了,为什么之前的 add 就没有反馈,而 commit 就有反馈呢?

其实是这样子的:添加到暂存区域,或者在暂存区域删除一些数据,是不是我们频繁操作的,如果每一次都反馈,这样子会显得整个画面非常凌乱,而commit 是每一次提交的最后一个命令,所以这个一个版本的最后有个步骤,所以 git 也要汇报一下当前的工作状况,这是一个程序对用户的基本尊重。

以上就是我们上节课的内容,相信大家经过这次的梳理,应该会了解得更透彻吧。


我们这节课要讲什么呢?

查看状态

既然大家都是程序员,当然要以代码担当,我们可忙了,一个项目 百八十个文件,怎么知道哪些文件是新添加的,哪些文件是已经添加到暂存区域的呢?总不能让我们拿个本本一个一个记下来吧,当然不,我们可是码农呢,就算累死,双手也不能离开键盘。

不过你们也不用担心,作为世界上最伟大的版本控制系统 Git,你能遇到的问题,Git 早就有了相应的解决办法,你唯一要做的就是学习,补充知识。

Git 有一个命令:git status

使用它,你就可以随时查看 git 当前的工作状态,比如说,你在上节课的步骤都完成之后输入 git status,

E:\MyProject>git add README.mdE:\MyProject>git commit -m "add a readme file"
[master (root-commit) d1dc82b] add a readme file1 file changed, 1 insertion(+)create mode 100644 README.mdE:\MyProject>git status
On branch master
nothing to commit, working tree clean

大家看到了,有两句提示:

On branch master:说明我们现在位于 master 的分支里;

nothing to commit, working tree clean:工作目录当前是干净的,没有需要提交的文件,意思就是在上次 commit 之后,工作目录里的内容压根就没有被改动过。

OK,既然我们要做一个大项目,那我们当然需要一个版权声明,为了显得我们大公无私,我们决定采用 MIT 协议给予用户最大的权益。

我们这里创建一个 LICENSE 文件,将 MIT 协议的内容拷贝进来

Copyright (C) <year> <copyright holders>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

有必要给大家提示一下:MIT 协议是所有开源许可里面最宽松的一个,意思是:用了我的代码,你只需要包含我这个协议文件就可以了,没有别的任何限制了。也就是说别人可以拿你的代码披上自己的外壳,然后改得面目全非再拿出去卖,然后别人卖了很多钱再来砸你,你也没办法的。

然后我们再在 cmd 里: git status

E:\MyProject>git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

LICENSE

nothing added to commit but untracked files present (use "git add" to track)

E:\MyProject>

就出现了一个红色的 LICENSE,目前该文件的状态属于 Untracked files,是在 master 的分支里面。Untracked files 就是指的未跟踪文件,意思就是新增加的未添加到暂存区的文件,它们处于一个逍遥法外的状态,但是你一旦将他们加入到暂存区或者提交到 Git 仓库,它们就会受到 Git 的跟踪了。圆括号你的内容{ (use "git add <file>..." to include in what will be committed)  } 就是 Git 给我们的建议。

我们不妨按照建议来操作:

E:\MyProject>git add LICENSEE:\MyProject>

然后再查看一下状态:

E:\MyProject>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

new file:   LICENSE

E:\MyProject>

大家看到了,首先,我们的文件变绿了,然后给出了新的提示:use "git reset HEAD <file>..." to unstage,意思就是恢复暂存区域,因为我们刚刚把 LICENSE 文件添加到暂存区域,就是说覆盖了原来暂存区域的内容了,如果你突然反悔,不想让 Git 跟踪你的 LICENSE 文件,你可以使用 它推荐的 git reset HEAD <file> 命令。该命令就是将最近一次添加到 暂存区域的文件恢复到先前状态。

git reset HEAD <file> 命令

<file> 是可选的,如果没有的话,就是对最后一次添加到暂存区的所有文件进行回退操作,如果有 file 的话,就是对添加到暂存区的指定的 file 进行回退操作。

E:\MyProject>git reset HEAD

E:\MyProject>git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

LICENSE

nothing added to commit but untracked files present (use "git add" to track)

还真回去了呢。

我们再次提交:

E:\MyProject>git add LICENSEE:\MyProject>git commit -m "add a LICENSE file"
[master d772854] add a LICENSE file1 file changed, 7 insertions(+)create mode 100644 LICENSEE:\MyProject>git status
On branch master
nothing to commit, working tree clean

然后我们突然发现,在LICENSE 里面忘记写上自己的名字了,至少说明这个项目是由我们主导开发的。

Copyright (C) 2018 2485952510@qq.com

Permission is hereby granted, free of charge,。。。。。。

改完之后保存,再来执行 git status

E:\MyProject>git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

E:\MyProject>

现在的状态就是:由于你对工作目录的文件进行了修改,导致该文件和暂存区的文件不匹配了,所以 Git 又给出了两条建议:

1、使用 add 命令将目录中的新版本 覆盖暂存区域再提交

2、使用 checkout 命令将 暂存区域的旧版本覆盖回 修改的新版本(该命令是 Git 里面少数具有威胁的命令之一,如果执行该命令,你修改了大半天的代码一下子就变回原样了)

我们来是试一下:

E:\MyProject>git checkout -- LICENSEE:\MyProject>

ok,我们再来看一下 LICENSE 文件

Copyright (C) <year> <copyright holders>

Permission is hereby granted, free of cha。。。。

TMD,真的变回原样了,我们刚才的修改就被覆盖掉了。所以说,这个是具有威胁性的命令,大家用的时候要慎重。

我们再次手动修改一下 LICENSE,git status:

E:\MyProject>git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

E:\MyProject>

又回到这里了。

我们这次尝试第一个建议 add:

E:\MyProject>git add LICENSE

E:\MyProject>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

modified:   LICENSE

E:\MyProject>

这时,接下来需要的就是 commit 了,这时,我们先不提交,而是再次修改 LICENSE 文件。

Copyright (C) 2019.1.15 2485952510@qq.com

。。。。。。

修改保存之后,我们再次 git status:

E:\MyProject>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

modified:   LICENSE

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   LICENSE

E:\MyProject>

这时就很诡异了,绿色的 LICENSE 表示文件放在了暂存区,等待被提交到git 仓库;而红色的LICENSE 文件说明文件还在 工作目录等待被添加到暂存区域。

大家知道这时怎么一回事吗?

这种情况你应该淡定,你应该意识到,同时存在两个不同版本的 LICENSE(这在前面我们也提到过的),三棵树,你可以理解为 3个文件夹,3个文件夹你可以存放3个不同版本的文件,明白吧。

在上面的这个情况下,这两棵树是不同的,绿色的是 暂存区的LICENSE,红色的是刚加入到工作目录的LICENSE。

这时,你如果直接 commit,你是将 这个绿色的(2018)的LICENSE 提交到 Git 仓库,如果你需要将最新修改的 LICENSE 提交,你需要先 add ,将LICENSE(2019.1.15)添加到暂存区覆盖原来的 暂存区的 LICENSE(2018),然后再使用 commit 提交到 Git 仓库。

E:\MyProject>git add LICENSE

E:\MyProject>git commit -m "change the LICENSE file"
[master a45433d] LICENSE
 1 file changed, 1 insertion(+), 1 deletion(-)

现在我们这样一个劲的往 Git 仓库提交数据,但是 Git 仓库目前有多少个版本的数据我们还不清楚,这时我们就可以使用 git log 命令来查看历史提交记录:

E:\MyProject>git log
commit a45433d682fac53905559365890e03cb2fd4b61b (HEAD -> master)
Author: XiangyangDai <2485952510@qq.com>
Date:   Mon Jan 14 20:46:05 2019 +0800

change the LICENSE file

commit d77285410e3f33daac3afc103b996735a19517ca
Author: XiangyangDai <2485952510@qq.com>
Date:   Mon Jan 14 20:19:15 2019 +0800

add a LICENSE file

commit d1dc82becdffae416244a0e2298da0064d51ee4c
Author: XiangyangDai <2485952510@qq.com>
Date:   Mon Jan 14 19:04:34 2019 +0800

add a README file

我们刚才提交了 3 次,这里就有3个对应的历史记录,它的排序是按时间从近到远的。

Author: 就是作者,就是注册的用户信息,Date 就是提交的日期。

最下面一行就是我们提交时的 说明注释,我们就可以很清楚的看到我们每一次提交做了什么事情。

另外,每一次提交的历史记录中还有一行黄色的信息,这个是 Git 为每次提交计算出来的 ID,它其实一个完整的 SHA-1 校验和(尽管你的文件内容可能跟我的完全一致,但这个值却不一样,这是因为账号、时间不同而导致),然而你并不需要知道这是个什么东西,你只要知道它是唯一的就可以了,获取 这个ID 值,你就可以找到对应的版本。

那有同学就要问了:为什么 ID 不是传统的1,2,3.。。。排序呢?难道作者是为了装 X,其实不是的,因为 Git 是一个分布式的版本控制系统,所以使用 Git 来管理版本的话经常会有很多名程序员同时在干活,很多人同时工作的话,如果使用1.2.3.4.5.....就很容易产生混乱和冲突。

Git实用教程 3.0:查看工作状态和历史提交相关推荐

  1. Git实用教程 4.0:回到过去

    Git 是一部设计精良的时光机器,使用 Git ,我们可以在不同时期的版本之间来回穿梭,上节课我们无意间讲到了两个关于 回退版本的命令:reset 和 checkout •add –用于把工作目录的文 ...

  2. centos 7.0 查看selinux状态|关闭|开启

    Linux在安装好之后通常SELinux都是出于默认开启的状态,开启的情况下会导致一些服务的安装不成功. 在不需要的情况下完全可以关闭掉,下面是在centos 7.0里面如何查看,关闭selinux. ...

  3. 痞子衡嵌入式:第一本Git命令教程(0)- 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...

  4. linux 7.0查看防火墙状态,centos7查看防火墙状态

    查看防火墙状态 [root@VM_0_3_centos /]# firewall-cmd --state not running [root@VM_0_3_centos /]# sudo system ...

  5. git与gitk查看某个文件的历史提交记录

    //查看gstbuffer.h历史提交log # git log --pretty=oneline gst/gstbuffer.h Or # gitk gst/gstbuffer.h

  6. git回退历史版本无法上传_Git实用教程(四) | Git本地库操作(查看提交历史、版本前进回退)...

    Git实用教程专栏回顾 Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例) Git实用教程(二) | Git简介及安装详解 Git实用教程(三) | Git本地库操作(仓库初始化. ...

  7. git 添加用户名和邮箱_Git实用教程(二) | Git简介及安装详解

    Git实用教程专栏回顾 Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例) 1.Git简介 Git(官网 https://git-scm.com/)是一个免费开源的分布式版本控制系 ...

  8. 史上最全Git学习教程

    Git是世界上最先进的分布式版本控制系统,没有之一. -- Git爱好者 Git 是一个「分布式版本管理工具」,其具备太多的优点:更方便的 Merge.更方便的管理.更健壮的系统.对网络的依赖性更低. ...

  9. git使用教程-一篇文章全搞定哦

    Git使用教程 Git是什么 文章转载自 代码飞:https://code.bywind.cn/2018/07/14/170/ Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项 ...

最新文章

  1. Golang 微框架 Gin 简介
  2. 小评 XenServer 6.0功能
  3. sqlserver 安装共享功能什么意思_科普:网格屏是什么意思?LED网格屏怎么安装...
  4. 8086汇编_除法指令
  5. 系出名门Android(2) - 布局(Layout)和菜单(Menu)
  6. ABB RAPID 在 Notepad++ 中语法高亮的实现
  7. 多边形的时针方向与法线方向
  8. Allegro改动shape网络节点
  9. 计算机寄存器及标志位详解
  10. 在Linux上进行动态注入 | LD_PRELOAD
  11. ONNX系列二 --- 使用ONNX使Keras模型可移植
  12. 内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)
  13. 【LeetCode】【数组】题号:*54,螺旋数组
  14. 在Mac环境下查看附近路由器的MAC地址
  15. NFT游戏系统开发(NFT元宇宙系统定制开发)
  16. 使用HTML实现图片切换/轮播
  17. 如何建立风险分析模型
  18. MATLAB立体椭球,matlab拟合三维椭球
  19. 报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x93 in position 1721: illegal multibyte sequen
  20. 局部加权回归LOESS

热门文章

  1. matlab三维山峰/山脉/山地曲面数据图
  2. 如何写中小学教育教学论文?
  3. RunJS个人使用推荐(好用的JS、css实时预览、编辑、管理等功能)
  4. 至强服务器装2003系统蓝屏,Windows Server 2008 R2 ntoskrnl.exe 引起蓝屏故障,重新启动...
  5. sentinel与nacos持久化
  6. 字符跳动动画效果(Html+Css)
  7. Salesforce去除邮箱验证
  8. 最好的20款 CSS 编辑器分享前端开发人员
  9. nyoj 451 光棍节快乐
  10. 【English】Enjoy your plateaus 享受你的瓶颈期