Git是一款分布式源代码管理工具(版本控制工具) 。
Git得其数据更像是一系列微型文件系统的快照。使用Git,每次提交或保存项目状态时,Git基本上都会记录当时所有文件的外观,并存储对该快照的引用。为了提高效率,如果文件没有改变,Git不会再次存储文件,只是指向它已存储的上一个相同文件的链接。Git认为它的数据更像是一个快照流,会将数据作为项目的快照存储一段时间。可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
【GeekHour】一小时Git教程

工作区:就是你在电脑里能看到的目录
暂存区:工作区中的隐藏目录.git文件不是工作区而是git的版本库,其中最重要就是称为stage(或者index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
本地仓库:commit时文件的存储仓库,也是位于.git中

未跟踪:工作目录下新创建的文件,没有使用git add指令添加到git的跟踪文件中
未修改:已经添加到git的版本管理中但是文件没有发生修改
已提交:已经发生修改的文件
已暂存:添加到git版本管理的文件
创建git仓库目录,会在当前目录下生成my-repo的目录并且在这个目录下生成.git目录
git init my-repo
克隆一个远程项目在当前目录下
git clone project-addr
查看当前仓库的状态
git status
查看当前暂存库文件
git ls-files
将文件添加到暂存区,等待提交
git add fileName
git add *.txt # 以通配符的方式提交到暂存区
git add . #将当前工作目录的所有文件都提交到暂存区
将文件从暂存区去除
git rm --cached fileName
将文件提交到本地仓库,只会提交暂存区中的文件而不会提交工作区的中的其他文件
git commit -m "commit info"
查看简洁的提交记录
git log --online

三个命令参数的区别是在本地的工作区、暂存区代码不一致时才会有区别
git reset --soft:回退到指定版本,并且保留工作区域暂存区修改的代码
git reset --hard:回退到指定版本,既不保留工作区也不保留暂存区的代码修改
git reset --mixed:回退到指定版本,保留工作区的代码变化,不保留暂存区的代码变化
例如此时在目录下新增一个文件三,然后回退到上一个版本,soft方式会发现工作区域暂存区的代码都有文件三,而hard方式文件都不在,mixed方式工作区在但暂存区不在,如下图

查看工作区、暂存区的差异
git diff

比较工作区域版本库的差异,HEAD指向最新的暂存区代码
git diff HEAD
比较暂存区域版本库的差异
git diff --cached
比较特定版本的文件差异,5af9ob8/b270efb是两个版本的版本值
git diff 5af9ob8 b270efb
比较上一个版本与最新版本的差异
git diff HEAD~ HEAD
git diff HEAD^ HEAD
git diff HEAD~2 HEAD #上两个版本与最新版本的差异
同时删除工作区与暂存区的文件
git rm file1.txt
删除暂存区的文件,保留工作区中文件
git rm --cached file.txt
忽略文件,.gitignore文件中记录了哪些需要被忽略的文件名称,支持通配符、文件夹(空文件夹不支持)
git access.log > .gitignore
创建新的分支
git branch my-branch
查看项目所有的分支
git branch
删除分支
git branch -d my-branch
切换到指定分支
注意:git checkout除了用来切换分之外还可以用来恢复到文件,因此当文件名与分支名相同时会产生歧义,这也是增加switch指令的原因
git checkout my-branch
git switch my-branch # 2.23版本之后支持的分支切换命令
合并分支,需要先确认当前在什么分支下例如在master分支,然后使用下面指令代表将my-branch分支合并到当前所在的master分支上
git merge my-branch
找到当前分支与main分支的共同节点,以dev分支为基础,将main分支合并到dev分支之后
git switch main
git rebase dev
