git学习笔记--从0开始学习使用git
本文为【GeekHour】一小时git教程的精简学习笔记,部分图表来自视频内
1.git概述
版本控制系统大致可以分为集中式和分布式两类
而git则是一个免费开源的分布式版本控制系统
在下图所示的集中式版本控制系统中,文件均保存在服务器的仓库中,电脑上只有文件副本
而分布式版本控制系统中,每一个电脑上都会有一个仓库副本(git中的本地仓库),也可以将仓库同步到远程服务器中(例如github的仓库),更改完成后仓库之间互相同步来更新。
2.git安装与配置
git官网链接https://git-scm.cn/
如果速度慢可以尝试使用国内镜像站https://registry.npmmirror.com/binary.html?path=git-for-windows/
安装时选择好安装位置一路Next即可
接着可以在任意目录打开终端,在终端中输入git -v查看git版本,若输出git版本信息,则安装成功
Windows在安装玩git后会自动安装git bash,在文件夹的右键菜单中可以看见运行git bash的选项,同样可用
确认安装完成后,可以开始配置git的用户信息,这一步主要是为了能在提交时标明提交者的信息,包含用户名和邮箱
1 | git config --global user.name "用户名字" |
其中--global参数表明配置会在单一用户的所有仓库生效
若是将--global替换为--system,则会对系统下的所有用户生效
若是不加这个参数,则会对当前目录的仓库生效,仓库配置优先级高于全局,会覆盖全局设置
使用git config --global --list来检查配置是否生效
同理,修改config后的参数可以查看不同范围内的配置
3.了解git仓库
接下来,我们就可以开始尝试创建本地的git仓库了
找到你的项目根目录,或者找一个空目录进行尝试。在这个目录下打开终端或是git bush,输入git init
此外,还可以通过git clone命令来从远程服务器上克隆一个完整的仓库下来
创建完目录后,可以看见在当前目录下生成了一个隐藏的.git目录
在.git目录下存放有各种各样的文件,这些都是git组成仓库所需要的文件
此外,还可以在git init后面添加仓库名,这样会让git在当前目录下创建一个包含有.git的文件夹作为一个完整仓库
1 | $ git clone 仓库地址 |
了解git工作目录
git本地工作目录
git的本地工作目录大致分为三个部分,分别是工作区 暂存区 本地仓库
在工作的过程中,我们会在工作区来工作,创建并编写项目,然后使用git add将文件放置到暂存区,最后使用git commit提交到本地仓库。如果有需要,则可以将本地仓库复制到远程仓库中(后面会详细说明)
git目录下的几种文件状态
git工作目录下的文件大致可以分为一下四种类型未跟踪 未修改 已跟踪 已暂存
- 未跟踪:在工作区中创建的新文件,未被git管理
- 未修改:工作区中已经被git管理,但是未经修改过的文件
- 已修改:已经修改过的文件,但是未添加暂存区
- 已暂存:已经放到了暂存区中的文件
添加/提交文件
现在来看看具体的添加/提交文件的流程
在git的工作区中创建文件后,可以通过git status命令来查看文件状态
这里我在工作目录下新建了一个file1.txt文件,可以看到返回的untracked files中出现了红色的file1.txt文件,表明目前这个文件处于未跟踪状态(Untracked)
此时执行一下git add .来将目录下的所有文件放置到暂存区内
再次执行git status命令,可以发现file1.txt变成了待提交状态(Changes to be committed)
接下来使用git commit -m "提交备注"命令来将暂存区中的代码提交到本地仓库中,提交备注中可以写上备注以便管理和组织。-m参数可以让本次提交的备注直接引用命令中的备注,若是直接git commit,则会打开文本编辑器界面并要求在里面写提交备注(一般是vim文本编辑器,输入:q即可退出,输入:q!强制退出),一般用不着这样
使用通配符向暂存库添加文件
git支持使用通配符向git的暂存库中添加文件
在这里我的目录下存在有file1.txt到file3.txt三个文件和file4.sh这个文件。使用git add *.txt可以将txt文件添加到暂存区中
除此之外,add命令后面还可以用文件名/目录地址来指定向暂存区添加的文件(支持相对/绝对路径,推荐使用相对路径,并且只能指定仓库目录下的文件进行提交)
查看提交记录
使用命令git log来查看提交记录,若加上--oneline可以查看简洁版的记录
在每次提交都会有一个唯一的提交ID,就是commit后面的那串字符
Tips:
git log命令打印的ID是完整的 40 位十六进制字符,而git log --oneline打印的是前 7 位字符,一般情况下这个缩写的ID这是可以正常使用的,不需要为此担心
git中的版本回退
在git中,使用git reset命令来进行项目的版本回退,这个命令有三种参数
- –soft 只回退本地仓库,保留工作区和暂存区
- –hard 工作区,暂存区,本地仓库都回退
- –mixed 暂存区,本地仓库会进行回退,工作区保留
回退命令的用法:
1 | $ git reset --参数 提交ID |
可根据实际情况选择回退模式
Tips:如果不小心回退时丢失了文件,可以撤销回退操作。使用
git reflog查看仓库操作的历史记录,找到回退操作前仓库的对应id,使用git reset回退到误操作前的版本
在git中比较文件
使用命令git diff可以比较文件在不同版本/分支或者位置上的区别
1 | $ git diff //直接使用git diff可以查看文件在工作区,暂存区中的区别 |

可以看到,git diff返回了存在差异的文件的名称,以及文件的哈希值和权限(index后面的内容),还有具体的差异内容
同理,使用不同的参数可以在不同的位置检测文件的差异
1 | $ git diff HEAD //检查工作区与仓库之间的差异 |
Tips:可以使用
HEAD来表示最新的提交版本,使用HEAD~来表示上一个版本,使用HEAD~2表示提交记录中的倒数第二个版本,可以换成别的数字指定别的历史版本。在git中,HEAD会指向分支的最新提交节点。
在git中删除文件
补充:如何查看仓库中不同区域的内容
1 | $ git ls-files //打印暂存区中的内容 |
