文章目录
- 前言
- 1.Git的基本概念
- 1.1 开发中的实际场景
- 1.2 版本控制器的方式
- 2.Git的工作流程
- 3.Git的安装以及配置
- 3.1 git的下载与安装
- 3.2 基本配置
- 3.3 为常用指令配置别名(可选)
- 4.获取本地仓库
- 5.基础操作指令
- 5.1 Git工作目录下对于文件的修改(增减、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化
- 6.分支
- 7.Git远程仓库
- 7.1 远程仓库-注册_创建仓库_配置公钥
- 7.2 远程仓库-添加_查看_推送
- 7.3 从远程仓库中克隆
- 7.4 从远程仓库中抓取和拉取
- 7.5 解决合并冲突
- 总结
前言
本文整理了Git入门的基础教程,后续将持续更新并补充更多Git相关知识。
1.Git的基本概念
1.1 开发中的实际场景
① 备份
② 代码还原
③ 协同开发
④ 追溯问题代码的编写人和编写时间(版本号-每次修改都定义一个版本)
1.2 版本控制器的方式
① 集中式版本控制工具
集中式版本控制工具,版本库文是集中存放在中央服务器的,team里面每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或者互联网。个人修改然后提交到中央版本库。
举例:SVN和CVS
② 分布式版本控制工具
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,就无需联网,因为版本库就在自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了
举例:Git
Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的,我们使用Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们的PC一样的,我们可以把他当作一个开发者的PC就可以,就是为了大家代码容易交流不关机用的。没有它一样可以工作,只不过“交换”修改不方便
2.Git的工作流程
工作流程图:
3.Git的安装以及配置
3.1 git的下载与安装
git下载地址:https://git-scm.cn/downloadsGit-2.20.1-64-bit.exe
Git GUI:Git提供的图形界面工具Git Bash:Git提供的命令行工具
安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
3.2 基本配置
① 打开Git Bash
② 设置用户信息
git config --global user.name “itcast”
git config --global user.email “hello@itcast.cn”
③ 查看配置信息
git config --global user.name
git config --global user.email
3.3 为常用指令配置别名(可选)
有些常用的指令参数非常多,每次都要输入很多参数,我们可以使用别名
① 打开用户目录,创建.bashrc文件
② 在.bashrc文件中输入如下内容
#用于输出git提交日志 alias git-log=‘git log --pretty=oneline --all --graph --abbrev-commit’ #用于输出当前目录所有文件及基本信息 alias ll=‘ls -al’③ 打开gitBash 执行 source ~/.bashrc
④ 解决GitBash乱码问题
git config --global core.quotepath false
${git_home}/etc/bash.bashrc 文件后加入下面两行 export LANG=“zh_CN.UTF-8” export LC_ALL=“zh_CN.UTF-8”git_home:git安装目录
4.获取本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
1)在电脑任意一个位置创建一个空目录,作为我们本地git仓库
2)进入这个目录中,点击右键打开Git Bash窗口
3)执行命令git init
4)如果创建成功后可在文件夹下看到隐藏的.git目录
5.基础操作指令
5.1 Git工作目录下对于文件的修改(增减、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化
①git add (工作区——>暂存区)
②git commit (暂存区——>本地仓库)
1) 查看修改状态(status)
作用:查看修改的状态(暂存区、工作区)
命令形式:git status
2) 添加工作到暂存区(add)
作用:添加工作区一个或多个文件的修改到暂存区
命令形式:git add 单个文件名 | 通配符
git add .(通配符) :把所有的文件都加入到暂存区
3) 提交暂存到本地仓库(commit)
作用:提交暂存区的内容到本地仓库的当前分支
命令形式:git commit -m “注释内容”
4) 查看提交日志(log)
作用:查看提交记录
命令形式:git log [option]
options:
--all:显示所有分支 --pretty=oneline 将提交信息显示为1行 --abbrev-commit 使得输出commitId更简短 --graph 以图的形式显示5) 版本回退
作用:版本切换
命令形式:git reset --hard commitID
commitID 可以使用 git -log 或git log指令查看
同样的方式还能回去,不过需要commitID,如果没有配合git reflog也能找回
如何查看已经删除的记录?git reflog
这个指令也可以看到已经删除的提交记录
6) 添加文件至忽略列表
一般我们总会有些文件不需要纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。这种情况下,我们可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),要列出忽略的文件模式。
例:
#no.a files*.a#but do track lib.a, even though you're ignoring.a files above!lib.a#only ignore the TODO file in the current directory, not subdir/TODO /TODO# ignore all files in the build/directorybuild/#ignore doc/notes.txt, but not doc/server/arch.txtdoc/*.txt#ignore all .pdf files in the doc/ directorydoc/**/*.pdf一般不需要自己写
6.分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大BUG修改、开发新的功能,以免影响开发主线。
HEAD指向谁谁就是当前分支
1) 查看本地分支
命令:git branch
2) 创建本地分支
命令:git branch 分支名
3) 切换分支
命令:git checkout 分支名
我们还可以直接切换到一个不存在的分支(创建并切换)
命令:git checkout -b 分支名
4) 合并分支
一个分支上的提交可以合并到另一个分支
命令:git merge 分支名称
一般是其他分支合并到master分支
5) 删除分支
不能删除当前分支,只能删除其他分支
命令:git branch -d b1 删除分支时,需要做各种检查git branch -D b1 不做任何检查 强制删除(分支做了修改没有合并,但是又不需要合并就需要强制删除)
6) 解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
① 处理文件中冲突的地方
② 将解决完冲突的文件加入暂存区(add)
③ 提交到仓库(commit)
冲突部分的内容处理如下图所示:
开发中分支的使用原则和流程:
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
·master (生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
· develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可
以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
· feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
. hotfix/xxxx分支,
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。
· 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
补充:合并的快进模式
出现拱形:master和dev上都有修改
7.Git远程仓库
搭建git远程仓库需要借助互联网提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等
GitHub:https://github.com
码云: https://gitee.com
GitLab:https://about.gitlab.com (用于搭建自己的私服)
7.1 远程仓库-注册_创建仓库_配置公钥
流程:
1)注册账号
2)创建远程仓库
3)配置SSH公钥
① 生成SSH公钥
ssh-keygen -t rsa- 不断回车
如果公钥已经存在则自动覆盖
② Gitee设置账户公钥
- 获取公钥
cat ~/.ssh/id_rsa.pub - 验证是否配置成功
ssh -T git@gitee.com
7.2 远程仓库-添加_查看_推送
流程:
① 添加
此操作是先初始化本地库,然后与已创建的远程库进行对接
命令:git remote add <远端名称> <仓库路径>
远端名称:默认是origin
仓库路径:从远端服务器获取此url
例:git remote add origin git@gitee.com:mmm_0722/git_test.git
② 查看:git remote [-v]
③ 推送
命令:git push [-f] [--set-upstream] [远端名称[本地分支名][:远端分支名]]
如果远程分支名和本地分支名称相同,则可以只写本地分支git push origin master
完整:git push origin master:master
-f:表示强制覆盖
–set-upstream:推送到远端的同时,建立起和远端分支的关联关系git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端名git push将master分支推送到已关联的远端分支git branch -vv:查看本地分支和远程分支的关联关系
7.3 从远程仓库中克隆
如果已经有一个远端仓库,我们可以直接clone到本地
命令:git clone <仓库路径> [本地目录]
本地目录可以省略,会自动生成一个目录,会下载到打开Bash的这个目录下
7.4 从远程仓库中抓取和拉取
远程分支和本地分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作
① 抓取命令:git fetch [remote name] [branch name]
抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
如果不指定远端分支和分支名,则抓取所有分支
② 拉取命令:git pull [remote name] [branch name]
拉取指令就是将远端仓库的修改拉到本地自动合并,等同于fetch+merge
如果不指定远端名称和分支名,则抓取所有并更新当前分支
git pull的一些注意点:
① 什么时候可以用git pull
git pull 从当前分支跟踪的远程仓库拉取代码,这个远程仓库是通过 git remote 配置的。
git remote -v:查看当前仓库配置的远程仓库
可以拉取的仓库类型:
- 自己的仓库
- Fork的仓库(就是指把别人仓库里的东西复制到自己的仓库了,本质上还是自己的仓库)
- 公开仓库(有读取权限)
- 团队仓库(有权限)
② 远程仓库配置的一些问题
配置是持久的
在同一个仓库目录下配置就一直存在,但是不在同一个仓库目录下就要重新配置(每个仓库的配置是独立的)
什么时候需要重新配置:
- clone新仓库,clone新仓库时会自动配置origin(新仓库只有自己的配置没有原来的配置,就算新仓库建在原来的仓库目录下,但因为新仓库都是需要新建文件夹的,所以也不会影响原来的配置)
- 删除远程仓库配置后
git remote remove origin - 在不同的仓库目录下
③ clone
clone别人的仓库相当于把自己的本地仓库跟别人的远程仓库关联
具体有什么权限要看别人的远程仓库给了什么权限(一般是只有读取没有写入)
clone之后会自动初始化本地仓库,不需要再手动获取本地仓库
7.5 解决合并冲突
在一段时间内A、B用户同时修改了同一个文件,且修改了同一行位置代码,此时会发生合并冲突
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支
在B用户拉取代码的时候因为A、B用户同一时间段修改了同一文件的相同位置的代码,故会发生合并冲突。
远程分支也是分支,所以合并冲突的解决办法也和解决本地分支冲突相同
总结
本文系统梳理了Git的基础入门知识,掌握这些内容足以应对日常工作中的大部分需求。我们将持续更新和补充相关内容,欢迎点赞关注,也期待您的指正建议。