教你简单学git(从零基础到进阶)

前言

什么是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工具账号登录

首先在Giteegithub任意一个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的数据库,通常也被称为仓库

它有两种:远端数据库本地数据库

  1. 远端数据库:配有专用的服务器,为了多人共享而建立的数据库。常见的有Gitee和GitHub。当然除此之外,一般互联网公司,内部有专门搭建自己的Git数据库,只供内网专用,公网无法访问。
  2. 本地数据库:为了方便用户个人使用,在自己的机器上配置的数据库。

本地数据库的创建

当你安装了Git,之后就可以通过命令行创建自己的本地git版本库了。

  1. 新建一个文件夹作为本地库的创建路径
  2. 在该文件执行命令
git init
  1. 以上就已经创建完成
    会提示你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是没有任何问题。

但是,你需要考虑,当正式环境已经有一个版本了,假如现在有两个人同时对该项目进行修改和开发功能,
其中一个人的修改和开发完成了,需要发布到正式版本,另一个人还没修改开发完成或者修改完成了,但是功能和现有的冲突,
一旦更新服务,会导致出现各种问题。

所有我们需要有分支进行提交我们的代码

一般做法是这样:


  1. master分支作为主分支,作为正式环境的代码
  2. 新建dev分支作为开发环境分支
  3. 当需要开发新的功能的时候,以功能命名新建分支
  4. 切换到功能命名的分支,在该分支上提交代码
  5. 开发完成后进行测试,确认没有问题将分支合并到dev开发环境分支
  6. 在开发环境测试功能是否有问题,没有问题,将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的教学,如有新内容将在本文章更新。

猜你喜欢

转载自blog.csdn.net/xc9711/article/details/128315734