前言
什么是Git?
当你刚刚接触到程序开发行业,别人通常都会对你说:git就是用来保存代码项目的,防止代码丢失。
是这个道理没错,但是并不准确。
Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
简单的说:
Git能够保存不同时间提交的文件,知道每个保存阶段的修改内容,保存文件的人员信息,根据对应信息可以自己决定是需要保存、恢复到某个时间点的文件状态,或者是更新等操作
为什么需要Git?
不单单是代码程序项目,就以我们常见的txt文件举例:
要把文档还原到编辑前的状态,大家都是怎么做的呢?
最简单的方法就是先备份编辑前的文档。
使用这个方法时,我们通常都会在备份的文档名或目录名上添加编辑的日期。但是,每次编辑文档都要事先复制,这样非常麻烦,尤其是修改了东西越多,保存的备份文件越多,导致想恢复到指定修改的文件的内容,也很容易出错。
再加上,如果毫无命名规则的话,就无法区分哪一个文档是最新的了。而且,如果是共享文件的话,应该加上编辑者的名字。还有,那些文档名字没有体现修改内容。
另外,如果两个人同时编辑某个共享文件,先进行编辑的人所做的修改内容会被覆盖
,相信大家都有这样的经历。
Git版本管理系统就是为了解决这些问题应运而生的。
准备工作
Git工具安装
为了能够在你的本机进行Git的操作,你需要先安装一个Git工具
图标长这样
Git工具下载
这里给大家推荐Git工具一个安装教程
Git工具安装教程
当下载安装完成之后
在桌面鼠标右键会出现
Git GUI Here
Git Bash Here
通常情况下,点击Git Bash Here
通过命令行进行git的管理
不过,需要一提的是,当你安装了Git工具,在安装过程中勾选添加到path进行配置git后,
就可以直接通过cmd命令行进行执行git命令
新建仓库和Git工具账号登录
首先在Gitee
和github
任意一个gitee网址创建账号
在登录的情况下,创建一个仓库(以下以gitee举例)
点击+号,点击新建仓库
然后输入仓库名称、介绍,初始化仓库,点击创建即可
完成后,点击
个人主页
–>仓库
,查看创建的仓库
点击去刚刚创建的仓库,点击克隆,复制git地址
然后自己选择一个文件夹或者创建一个新文件夹,在该文件夹鼠标右键,点击git工具
的Git Bash Here
鼠标右键输入如下
git clone git仓库地址
即可将仓库克隆到自己的本地文件夹
当你第一次克隆的时候,一般会跳出来需要登录,直接输入你克隆项目的账号和密码即可
Git工具账号切换
当你工作时间比较长久之后,可能你不是从一个git网站上进行克隆项目,但是不登录,
进行提交git代码会导致没有权限
操作的问题,这个时候就需要切换账号了
切换账号命令
git config --global user.name "用户名"
git config --global user.email "注册git的邮箱"
查看用户名
git config user.name
查看用户邮箱
git config user.email
入门篇
Git基础介绍
Repository
Repository
是Git的数据库,通常也被称为仓库
它有两种:远端数据库
和本地数据库
远端数据库
:配有专用的服务器,为了多人共享而建立的数据库。常见的有Gitee和GitHub。当然除此之外,一般互联网公司,内部有专门搭建自己的Git数据库,只供内网专用,公网无法访问。本地数据库
:为了方便用户个人使用,在自己的机器上配置的数据库。
本地数据库的创建
当你安装了Git,之后就可以通过命令行创建自己的本地git版本库了。
- 新建一个文件夹作为本地库的创建路径
- 在该文件执行命令
git init
- 以上就已经创建完成
会提示你Initialized empty Git repository in 什么什么路径
说明git就把仓库建好了,而且告诉你是一个空的仓库。
Git基础操作
git克隆
从上面,我们了解到,将git的项目复制克隆到我们本机电脑的命令为
git clone git项目地址
git添加和提交
在对文件进行修改后需要对git进行添加和提交代码
通过命令行
git add 文件名
进行提交单个修改的文件
git add *
进行提交所有修改的文件
添加完成后,你就可以进行提交代码,注意,提交代码应该是需要填写你具体作出了什么修改。
该文本提示不仅仅可以让自己知道有哪些改动,也便于多人开发进行查找记录
git commit -m "代码提交信息"
到这一步,你只是把代码提交到了本地数据库
,这个时候,并没有到远端git上。
git推送
在入门篇,其实应该需要讲到分支,但是作为新手,如果一来就直接讲分支,就比较复杂,所有在这边就只简单提一句:
在创建仓库的时候,默认会创建一个master主分支,你只需要把代码提交到主分支即可,主分支名称一般都是
master
切换到对应分支之后,使用提交命令
git push origin 分支名称
注意:推送的前提,是你有进行修改文件的添加和提交
git更新
假如你是多人合作进行开发项目,当你克隆了项目,但是克隆之后别人又修改了代码,并且提交到了远端git,
为了保证你的代码是最新你需要进行更新自己的代码
更新git命令
git pull
到这里的时候,就有人可能会问,明明已经有克隆命令,直接重新克隆一份就好了。
陈然,克隆命令也是可以获取最新的代码的,但是不要忘记,万一你也有修改代码呢?你的这些代码需要提交到远端呢?
总不能克隆一下项目,就重新写一遍?而且,就算是,你说也可以把文件替换一下,把新的文件复制一下再提交到远端
也是可以的,但是这样的做法非常的麻烦
git log
假如,你想了解git的提交历史记录等信息,可以使用命令:
git log
进阶篇
工作树和索引
在Git管理下,大家实际操作的目录
被称为工作树
。
如以下结构
--A文件夹
--B文件
--C文件
--D文件夹
--E文件
--F文件
假如你实际对A文件夹下的B文件进行了修改,那么B文件就是对应的工作树
在数据库和工作树之间有索引
,索引是为了向数据库提交作准备的区域。
Git在执行提交
的时候,不是直接
将工作树的状态保存到数据库,而是将设置在中间索引区域的状态
保存到数据库。
因此,要提交文件,首先需要把文件加入到索引区域中。
所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。
也就是
工作树
(修改的文件) ----->提交到暂存区
--------> 把暂存区的内容提交到远端git
分支
什么是分支?
作为进阶篇,相当多的篇幅都需要了解分支
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。
在其他分支上进行开发,完成后再将它们合并到主分支上。
当我们在开发的时候,如果是简单的项目,直接在master主分支上进行提交,把代码推送到远端git是没有任何问题。
但是,你需要考虑,当正式环境已经有一个版本了,假如现在有两个人同时对该项目进行修改和开发功能,
其中一个人的修改和开发完成了,需要发布到正式版本,另一个人还没修改开发完成或者修改完成了,但是功能和现有的冲突,
一旦更新服务,会导致出现各种问题。
所有我们需要有分支进行提交我们的代码
一般做法是这样:
- 将
master
分支作为主分支
,作为正式环境的代码 - 新建
dev
分支作为开发环境分支
- 当需要开发新的功能的时候,以
功能命名
新建分支 - 切换到功能命名的分支,在该分支上提交代码
- 开发完成后进行测试,确认没有问题将分支合并到dev开发环境分支
- 在开发环境测试功能是否有问题,没有问题,将dev分支合并到master分支
分支分类
分支大致分为两种,一种是Merge
,一种是Topic
但是,就我的工作周围,一般还是Mege分支用的居多。
以下,可作为概念了解即可。
Merge分支
Merge分支是为了可以随时发布release而创建的分支,它还能作为Topic分支的源分支使用。保持分支稳定的状态是很重要的。
如果要进行更改,通常先创建Topic分支,而针对该分支,可以使用Jenkins之类的CI工具进行自动化编译以及测试。
.
通常,大家会将master分支当作Merge分支使用。
Topic分支
Topic分支是为了开发新功能或修复Bug等任务而建立的分支。若要同时进行多个的任务,请创建多个的Topic分支。
Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支。
接下来,我在这边编写关于分支相关的git命令
分支命令
创建分支命令
git branch 分支名称
切换分支命令
git checkout 分支名称
ps:可使用如下命令同时执行创建并切换分支
git checkout -b 分支名称
以上命令,只是在本地
git创建分支,远端并没有
在本地git上可通过如下命令进行查看分支
git branch
通过如下命令,将本地的分支推送到远端git仓库
git push origin 分支名称
将另一个分支代码合并到当前分支上
切换分支
git checkout 当前分支名称
合并
git merge 另一个分支名称
// 推送到分支
git push -u origin 当前分支名称
值得一提的是:关于合并的代码有两种
merge
保持修改内容的历史记录,但是历史记录会很复杂。
rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。
也就是说,我们可以使用
git merge 分支名称
或者
git rebase 分支名称
进行合并
但是,很经常的,公司一般为了不出错,会要求需要使用
Merge
当将另一个分支代码合并之后,就可以去执行删除分支的命令了
删除远端分支命令
git push origin --delete 分支名称
或者
git push origin -d 分支名称
删除本地分支命令
git branch --delete 分支名称
或者
git branch -d 分支名称
冲突的产生和解决
冲突的产生
先说一下,为什么会产生冲突:
当你的代码还没提交,某一个文件需要修改,但是多人合作开发,另一个人也对该文件进行修改并且提交到了远端git,就会造成冲突,
A人员 拉取B文件 ----->修改,提交了代码,这个时候,修改后的文件就不是和B文件相同了
C人员 拉取B文件 ----->修改了该文件,打算进行提交或者拉取,导致冲突,修改后的文件不和B文件,也不和A人员修改后的文件相同
原因:两个人修改的文件数据不完全一样导致
什么时候有冲突
一般情况下,当我们执行拉取
,合并
、推送
的时候都有可能会产生冲突
也就是:
拉取
git pull
合并
git merge 分支名称
推送
git push origin 分支名称
如何解决冲突
有了冲突,就需要去解决,你才能够继续提交代码
当你进行拉取,提交和合并操作的时候,提示有冲突一般会提示你是哪些文件有冲突
并且在文件上标记有
<<<<<<< HEAD
冲突代码
>>>>>>>
的地方进行修改
修改完成之后,添加你修改后,解决完冲突的文件,使用命令
git add 冲突的文件名
git commit -m "代码提交信息"
git pull
当拉取完最新的代码之后,再次使用命令
git add myfile.txt
git commit -m "解决冲突代码提交信息"
git push origin 分支名称
假如,你是进行合并分支的时候产生的冲突,
也就是使用合并命令:
git merge 分支名称
导致冲突,那么,在修改冲突文件前最好是使用命令
git diff 源分支名称 目标分支名称
进行查看预览差异
结语
以上,为关于git的教学,如有新内容将在本文章更新。