视频学习链接:https://www.bilibili.com/video/BV1MU4y1Y7h5?p=4&vd_source=b91967c499b23106586d7aa35af46413
1、Git 和 Github
2、Git 的下载和安装
git官网下载比较慢的解决方法:https://blog.csdn.net/qq_39606853/article/details/121329451,下载好后,一路 next 安装好。
3、Git 的工作流程
4、Git 的常用命令
在任意文件夹下右键打开
尝试使用命令进行操作。
5、Git 的基本配置
5.1 设置用户信息
Git 的用户信息包括用户名和邮箱。
$ git config --global user.name "xxx"
$ git config --global user.name
$ git config --global user.email "xxx"
$ git config --global user.email
5.2 为常用指令配置别名(可选)
$ touch ~/.bashrc
之后,就可以为常用指令配置别名了。
例子如下
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
6、Git 的基本指令
6.1 获取本地仓库
git init
(警告忽略)
之后,
6.2 基础操作指令
在进行 git 初始化之后,当前文件夹已经变成了一个本地仓库,当前仓库中的其他文件夹和文件都属于工作区。
加入到暂存区,
提交到仓库中,生成一个个版本。
那刚刚提交到仓库中的文件去哪了呢?
输入指令
git log
可以查看提交的日志信息。
上面的操作就完成了对新创建文件的提交了,此外,还可以完成对修改文件的提交,步骤一样。
(上述操作是一步步确认后又继续往下操作的,所以会看起来比较麻烦,实际只需要使用其中两步就可以了)
如果当前工作区中修改(新建)的文件比较多,可以使用通配符的方式将其都加入到暂存区,之后统一提交。
提交文件到仓库中,除了上述使用 commit -m “注释” 的方式外,还有其他方式 ,这种是最简单的。
6.3 查看提交日志
当遇到一个大工程时,为了快速检索和查看提交的日志信息。就需要加上上面的参数选项了。
首先,标识(commit 后的一串字母)不需要全部显示,只需要前面几位就可以了。
git log --pretty=oneline --abbrev-commit --all --graph
这个命令在前面也起了别名,
因此,下次只需要输入命令 git-log 就可以实现提交日志的直观输出了。
6.4 版本回退
现在的日志记录如下,
假设现在想回到 add two test01.txt 这个版本,应该怎么做呢?
我们再使用 git-log 命令来看下,
对比下,没有恢复版本之前的日志输出。现在打开文件就可以看到之前版本的结果了。
如果,又不想恢复了,那如何再回去呢?
那如果之前的版本号被 clear 掉了,又应该如何操作呢?
除了 git log 这个命令之外,还有一个命令
这个命令将前面所有操作都给记录下来了,虽然没有直接告诉我们,但是可以根据行为(记录)重新找回之前的版本号。
6.5 指定 git 管理文件
也就是说,只需要使用命令 touch .gitignore 创建一个文件,然后使用记事本或者命令打开,并输入哪些文件不需要被 git 管理,指定时同样可以使用具体文件名和匹配符。
需要注意,.gitignore 这个文件也需要提交。
7 分支
7.1 什么是分支
7.2 如何查看本地分支
git branch
举例如下,
这里的 master 就是一个分支(我理解的是:每个人至少都有的一个分支,这个应该相当于主分支,也就是树的主干)
develop01也是一个分支,并且前面的 * 表示现在处于 develop01 这个分支上。
此外,还可以使用 git-log 来查看
HEAD 指向谁,谁就是当前分支。
7.3 如何创建一个本地分支
git branch 分支名
举例如下,
需要注意,在创建分支后,新创建出来的分支在文件内容上与当前分支上的文件内容一样。之后根据操作,文件内容就会变的不同。
7.4 如何切换分支
git checkout 分支名
举例如下,
在 master 分支上时,
切换到 develop01 后,
下面,在 develop01 这个分支上创建并提交一个文件 branch.txt,看看在 master 这个分支上是否会显示出来。
答案是不会显示的,下图为在 master 分支上的文件目录。
再看看在 develop01 这个分支上的文件目录。
此外,
举例说明下,
git checkout -b develop02
举例说明下,
看下,文件目录内容。
因为是从 develop01 这个分支创建而来的,所以该文件目录内容与 develop01 这个分支时的文件目录内容一样。
下面,再从 master 这个分支创建一下,试试。
看下,文件目录内容。
这也就印证了上面所说的在创建分支后,新创建出来的分支在文件内容上与当前分支上的文件内容一样。
7.5 合并分支
git merge 分支名 # 将"分支名"这个分支全都合并到当前分支上来
合并分支时,一般都是将其他分支合并到 master 这个分支上。
举例,当前的情况是
首先,切换到 master 分支上(当前已经在 master 分支上了),
下面,来将 develop01 这个分支合并到 master 这个分支上来。
之后,会有一个自动提示(类似一个 vi 窗口)。
这是因为没有指定注释内容,如果我们指定注释内容(使用 -m 表示要指定注释,如下图所示)就不会出现了。
最后,使用 :wq 来退出。
然后,来看下效果。
合并的快进方式
我们来看下目前的情况,
切换到 dev 分支上,然后在该分支上创建一个新文件 dev.txt。
之后,添加到暂存区和提交到仓库。
从上图状态中,根据分支 master 和 分支 dev 所处的位置,可以发现 dev 比 master 多了一次提交,(分支到达每一步都是由前面的每一步提交决定的。)因为 dev 比 master 多了一次提交,所以 dev 比 master 上的内容更全,所以这个时候,如果将 dev 合并到 master 上来,那 git 就会采用合并的快进方式直接将 master 放到 dev 的位置上来,从而使用 merge 进行合并时,就会出现下面的状态(与之前和并会出现类似 “合并桥” 形成对比)。但在合并之前要先切换到 master 分支上。
合并完成后,还要注意一个词叫做 Fast-forward,即快进模式。
7.6 删除分支
git branch -d 分支名
git branch -D 分支名
举例:删除 develop01 这个分支
强制删除分支的场景
当前在 master 分支上,我再创建一个分支 dev02 ,
我们再在 dev02 上进行文件创建和提交。
这个时候再来删除分支 dev02 ,试试
并不能直接删除,原因是当前所处的分支就是 dev02,于是我们先切换到 master 分支上再尝试删除 dev02 分支。
还是不能直接删除,dev02 的代码没有 merge 到 master 分支上,git 怕我们是误操作,所以提示我们是否真的要删除该分支,我们确认要删除,所以使用强制删除命令来删除 dev02 分支。
7.7 解决冲突
假设场景:两个人同时进行开发,如果两个人同时修改了同一个文件中的同一行代码(内容),这个时候就会产生冲突,因为 git 不知道使用谁修改的了。于是就会将冲突抛给用户,让用户来自己解决。
举例说明,
当前 git 中有一条分支 master,
下面在不同分支上修改同一个文件的同一个行内容,
首先,我们创建出来一条分支并切换到 dev01,
在 dev01 这个分支上修改 test01.txt
修改后的 test01.txt 的内容如下,
修改好后,再将其先添加到暂存区,然后提交到仓库。
切换到 master 分支上,
再在 master 这个分支上修改 test01.txt
修改后的 test01.txt 的内容如下,
修改好后,将其先添加到暂存区,然后提交到仓库。
再看下状态信息
现在,想要将 dev01 这个分支合并到 master 分支,那么就会出现问题。
这表明有冲突。此时再打开指定冲突的文件 test01.txt 看下,
HEAD 分支指向谁,谁就是当前分支,重点是要告诉 git 改成多少。
直接将其删除,改成一个确认的值。
改完之后,再重新添加暂存区,然后提交。
如果这里提交的时候,不加 -m 后面也不指定注释内容的话,就会出现如下图所示的提示信息,意思是会自动帮我们生成注释信息(黄色字的内容)
此时,直接输入 :wq 退出即可。
7.8 开发中分支使用原则与流程
master 和 develop 分支一般是固定的两个分支,不能删除。
一般在 develop 上开发新功能。
feature 分支用于开发新功能,完成后再合并到 develop 分支上,一般在合并到 develop 分支后可以删除,而 develop 分支则不能删除。
hotfix 分支用于修复 bug ,并不能直接在 master 分支上进行修改(因为不能影响程序的线上运行),一般是从 master 上再单独开出来一个分支进行修复,修复完成后,进行测试,测试通过后再合并到 master 分支 和 develop 分支上。