Git快速入门
Git快速入门
01、Git下载以及安装
这里我选择的是64位
的免安装版
下载完成后是一个是一个自解压程序,我们可以使用7-zip
将它解压到我们喜欢的地方,因为我们使用的是免安装版本,所以需要我们手动在系统环境变量的PATH
变量中增加如下设置即可
1 | # 例如这里我是将Git解压到E:\Software 请自行替换自己解压的位置 |
到这里我们可以使用cmd
来进行确认是否安装成功
1 | git --version |
如果看到对应的git
版本号信息的话,就说明我们的环境已经准备完成了~
02、Git的本地结构
一共分为三个部分:工作区、暂存区、本地库
- 工作区:我们写的代码以及相关文件都会被存在这里
- 通过
git add
可以提交到暂存区
- 通过
- 暂存区:我们想要提交但是还没有提交的文件在这里
- 可以通过
git commit
继续提交到本地库 - 可以通过
git reset
撤回到本地工作区
- 可以通过
- 本地库:存储所有真正的文件历史版本相关数据信息
03、Git使用场景
我们已经有了本地库
,同样需要一个代码托管中心
来帮我们维护远程库
本地库与远程库的交互,分为如下两个场景:
团队内部协作
- 由项目经理创建本地库,然后将本地库代码
push
推送到远程库 - 开发人员将远程库的代码
clone
到自己的本地库 - 代码开发完成,开发人员将本地库代码
push
推送到远程库 - 项目经理在开发人员提交后,将新的远程库代码
pull
拉取到本地
- 由项目经理创建本地库,然后将本地库代码
跨团队协作
- 由A项目经理创建本地库,然后将本地库代码
push
推送到A远程库 - 由B项目经理将A的远程库进行
fork
复制一个新的B远程库 - A和B的开发人员按照团队内部协作方式各自进行开发
- B团队需要将代码发起拉取申请
pull reqeust
操作 - A团队看到申请后,觉得B团队提交的代码没有问题,进行
merge
合并 - 合并完成后即完成了A的远程库和B的远程库进行同步的操作
- 由A项目经理创建本地库,然后将本地库代码
下面通过考试的场景帮助大家更好的理解这个过程
- 考试时你做的试卷相当于仓库
- 做错的题目相当于bug
- 老师把你的试卷拿过来相当于
fork
操作 - 老师在你的试卷进行批改相当于
git commit
- 改好的试卷还给你,相当于申请
pull request
- 你按照老师的批改把做错的题目进行了改正相当于
merge
当你想更正别人仓库里的错误时,要走一个流程:
- 先
fork
别人的仓库,相当于拷贝一份,相信我,不会有人直接让你改修原仓库的- 将代码
clone
到本地分支,做一些bug
的修改- 发起
pull request
给原仓库,让他看到你修改的bug
- 原仓库
review
这个bug
,如果是正确的话就会merge
到他自己的项目中
常见的托管中心种类分为局域网以及外网
局域网可以自行搭建
GitLab
外网可以使用
Github
或者Gitee
04、Git创建本地仓库
接下来我们就要开始创建本地仓库了,首先随便创建一个文件夹,并进行初始化操作
1 | # 因为我使用的是windows自带的cmd 所以需要先进入bash控制台 |
经过以上几个步骤后,我们就可以在gitdemo
文件夹内看到一个隐藏文件夹,其中会包含如下文件内容,这些文件内容请不要随意修改,可能会导致git
无法正确识别到
05、Git设置全局签名
设置全局签名,有利于将来让别人知道代码是谁提交的,这一步对于甩锅或者追责非常重要喔~
1 | # 设置名称 可以随意写 非托管中心账号 |
06、Git添加到暂存区
我们在gitdemo
文件夹中随便创建一个文件当作我们编写的文件,并将它添加到暂存区
1 | # 将demo.txt添加到暂存区 |
07、Git提交文件
1 | # 提交demo.txt并添加注释"第一次提交" |
需要注意的是:
- 不放在
git
本地仓库的文件是不会被git
进行管理的 - 即使放在
git
本地仓库的文件,也要通过git add
和git commit
才会被git
管理
08、Git查看文件状态
我们可以随时使用git status
对本地仓库内的文件的状态进行查看
1 | # 以下提示代表暂存区是空的 没有需要提交的文件 |
这时如果我们在本地仓库内新建一个demo2.txt
的文件,再次运行git status
1 | # 以下提示代表 有一个demo2.txt文件没有被追踪管理 并提示可以使用git add进行添加操作 |
然后我们使用git add
将demo2.txt
添加到暂存区中,再次运行git status
1 | # 将文件添加到暂存区 |
然后我们使用git commit
将demo2.txt
进行提交,再次运行git status
1 | # 将demo2.txt进行提交操作 |
09、Git查看提交日志
我们可以使用git log
来对我们历史提交过的文件日志进行查看
1 | git log |
在commit
后面的一长串数字 可以理解为当前操作记录的索引值 可根据它进行查找
1 | git log b55262a24db3bf2a244a5d63c4af22e2b7344f48 |
如果在日志很多的情况下,默认会显示分页信息,可以使用空格
换到下一页,使用b
换到上一页,如果看到结尾显示END
则代表已经到尾页了,使用q
可以结束查看日志,回到正常命令模式
但是如果我们的日志很多,这种方式显示起来就不是那么美观,我们可以使用一种更简洁的方式来打印我们需要的日志信息
1 | # 显示完整索引号 |
1 | # 显示简短索引号 |
我们还可以使用git reflog
查看日志信息,其中HEAD@{数字}
后面的数字代表需要几步才能回退到当前版本信息
1 | git reflog |
10、Git前进或回退历史版本
在上面查看日志的时候,我们可以看到每一次提交信息对应的索引
信息,下面我们就可以使用name.txt
文件来讲解reset
命令的使用
前置准备条件:创建一个name.txt
文件
- 第一次编写
zhangsan
进行提交 - 第二次编写
lisi
进行提交 - 第三次编写
wangwu
进行提交
然后我们使用git reflog
查看日志信息
这个时候我们可以看到,当前指针的位置是在最后一次提交的add wangwu
上,我们此时如果想回到add zhangsan
版本,可以使用如下命令
1 | # hard后面的索引值 可以在日志中进行查看 |
这时我们打开name.txt
会发下内容已经回滚到zhangsan
版本了,但是如果这时候我们又想再次回到wangwu
版本怎么办呢?还是同样命令,修改为wangwu
对应的索引即可
这里我们使用了--hard
参数,相关的还有一个参数是--mixed
参数和--soft
参数
- soft:重置
git commit
,即所有修改都回到暂存区中,可以再次进行commit
- mixed:重置
git commit
和git add
,即所有修改都回到工作区中,可以再次add
- hard:重置
git commit
和git add
和工作副本的修改,即未做任何修改,全部回滚
11、Git删除文件及找回
如果我们想把已经提交的文件进行删除,可以使用如下命令
1 | # 删除本地仓库中的name.txt文件 |
这里需要注意的是,如果误删了某个文件,删除操作并非真正的删除,只是将索引值指向了别处而已,可以使用上一节讲到的reset
进行回滚到上一个版本索引,实现文件找回操作
12、Git比对文件差异
如果我们想要比较出自己修改了哪些文件,可以使用如下命令
1 | # 比较某一个文件差异 例如name.txt 红色-代表删除行 绿色+代表增加行 |
需要注意的是,使用diff
命令比较的是工作区和暂存区,如果我们想要跟历史的某个版本进行比对,可以直接在命令后追加索引即可
1 | # 6354a90为要比对版本的索引值 name.txt为要比对的文件 |
13、Git查看分支
什么是分支?
- 在版本控制中,使用多条线同时推进多个任务,这里说的多条线,就是多个分支
分支的好处?
- 同时多个分支可以并行开发,互不耽误,提高开发效率
- 如果某个分支开发失败,可以直接删除,不影响主分支
我们可以使用git branch
来查看都有哪些分支,✳代表当前在哪个分支开发
1 | # 查看所有分支 |
14、Git创建分支
我们可以使用git branch 分支名称
来创建一个新分支
1 | # 创建一个名字叫prod的新分支 |
15、Git切换分支
我们可以使用git checkout 分支名称
来切换到另一个分支上
1 | # 切换到prod分支 |
16、Git解决冲突
冲突是比较常见的问题,下面说一下如何解决冲突问题
前置环境准备:
新建一个分支prod
1
2# 新建prod分支
git branch prod切换到prod分支修改
name.txt
,删除全部内容并重新写入aaaa
提交1
2
3
4
5
6# 切换到prod分支
git checkout prod
# 修改name.txt 写入aaaa 然后添加到缓存区
git add name.txt
# 提交name.txt
git commit -m "add aaaa" name.txt切换回master分支修改
name.txt
,删除全部内容并重新写入bbbb
提交1
2
3
4
5
6# 切换到master分支
git checkout master
# 修改name.txt 写入bbbb 然后添加到缓存区
git add name.txt
# 提交name.txt
git commit -m "add bbbb" name.txt
首先查看目前分支版本情况
1 | # 查看分支版本情况 |
可以看到目前两个分支索引已经不再同一个位置了,下面开始合并prod
分支内容到master
1 | # 合并prod到master 合并到哪个分支就要先切换到哪个分支 |
从提示中我们可以看到,自动合并失败,需要我们手动去解决错误然后进行commit
提交
打开文件后,我们可以看到出现了很多<<<<
、====
和>>>>
符号
<<<<到====之间为
master
中的内容<<<<到====之间为
prod
中的内容
我们需要做的就是,找到两个分支的开发人员进行确认分支之间的不同,并对文件进行修改,最后去掉所有的符号再次提交
如果这时候你使用以前的方式进行提交,会看到如下的报错,并且可以看到master
后面的状态显示为MERGING
显示,表示目前master
分支依旧处于冲突状态
这里我们提交的时候不能在最后写上具体的某个文件名
1 | # 提交冲突 |
这时我们已经看不到master|MERGING
了,说明我们已经成功将prod
合并到master
了
17、Git远程地址别名
我们的代码都是要提交到远程地址的,但是每次都要输入地址比较麻烦,这里我们可以给远程地址起一个别名方便日后使用
1 | # 查看是否有别名 |
18、Git推送本地到远程
我们可以使用git push
将本地仓库的代码推送到远程仓库中,这里可能会弹出账号密码输入框,按照你选择的代码托管平台进行输入即可
1 | # 将本地master分支的代码推送到demo别名的地址 |
然后我们打开github
,可以看到文件已经推送过来了,并且自动创建了master
分支
如果上文中我们使用prod
分支的话,会怎么样呢?当然是在远端新创建一个prod
分支啦~
1 | # 将本地prod分支的代码推送到demo别名的地址 |
19、Git克隆远程到本地
代码已经发布到远程仓库了,现在有一个新入职的开发人员需要拉取代码进行开发,这时候他就需要用到git clone
命令从远程拉取代码到本地了
1 | # 新建mygit文件夹用于存放远端拉取的代码 |
这时候我们可以看到,在mygit
文件夹内,已经创建好了一个demo
文件夹,并且其中包含了所有远程仓库中的文件信息以及一个隐藏的.git
文件夹
可以看到clone
克隆操作已经自动帮我们完成了三件事情
- 执行
git init
初始化操作 - 将远端代码完全复制到本地仓库中
- 自动帮我们给地址起了一个
origin
别名
20、Git更新远程到本地
使用git pull
进行拉取远端仓库代码到本地仓库的操作,等同于使用fetch
和merge
两个操作
1 | # 更新别名为origin的远程master分支代码到本地 |