git的介绍与使用

概述

Git是什么:
Git是一款版本控制软件。

为什么要使用Git:
在单人与多人开发中,都需要进行版本管理,同时多人开发还需要进行多人协同控制,而使用git来操作就是一个不错的选择。
那版本管理是什么,举个例子,就是当一个项目应用写好之后,发现需要新增内容或先前的要求有所改动时,我们需要把原本写好的代码(也就是版本1)做个备份保存起来,以免在后期改动的时候出现了问题,导致无法恢复到先前版本。版本管理非常适合大型项目和长期开发的维护。

下载安装

下载: https://git-scm.com/downloads下载完成之后可以打开cmd来运行一下git --version,有版本显示就安装成功了。
随后我们通过一下操作,可以在以后做版本记录时,知道是谁做的以及该用户的邮箱。

> git config --global user.name "xxx"
> git config --global user.email "xxx@xx.com"
> git config -l

显示如下:
在这里插入图片描述

架构

git架构主要分为四部分:
工作区:你实际编写代码的地方;
版本库:工作区中有一个隐藏目录.git,这个目录不属于工作区,而是git的版本库,是git管理的所有内容;
暂存区:版本库中包换一个临时区域,保存下一步提交的文件,提交后文件就会被删除;
分支:版本库中包含若干个分支,提交的文件存储在分支中。
大致流程如下所示:
在这里插入图片描述

仓库(版本库)

仓库是什么以及如何操作
仓库其实就是本地的一个目录,我们可以通过在想要建立仓库的目录下通过以下命令创建:

> git init

创建之后目录中会多出一个.git文件夹,如果看不到文件夹的话可能是文件夹被隐藏了,打开显示隐藏选项就可以了。除了该目录以外的地方就是我们的工作区了。
在这里插入图片描述
创建完成之后,可以输入> git status 查看该目录的状态,其中no commits yet说明你还没有把任何文件放在版本库的暂存区或分支中,untracked files下的文件是git还没有做过任何操作的文件。你可以下载一个TortoiseGit图形化工具直接通过文件图标来查看是否被tracked(还有一个很大的疑问,就是我已经显示了隐藏文件,为啥还是看不到desktop.ini,git却还能看到)。
在这里插入图片描述
如果要将工作区中的文件加入仓库的暂存区中,使用如下命令:

> git add .			--加入文件夹中的所有文件
> git add 文件名		--加入某一个文件

成功加入之后,再次查看状态就可以看到文件已经进入缓存区域了。
在这里插入图片描述
加入我们已经确定好要将这些文件放入分支中,也就是整个项目已经做好准备上线了,则输入以下命令实现存入分支

> git commit -m "The fisrt version"

其中-m表示提交时附带的信息,这个一定要加上,不然每次提交新版本的时候不知道里面有做过什么改动或者实现了什么新功能。
在这里插入图片描述
基本操作总结:
查看仓库状态:> git status
暂存文件:> git add .
提交文件:> git commit -m "description"

远程仓库

上一节所讲的仓库为本地仓库,当多人协同开发时,每人都在自己的本地仓库维护版本,但最后还是需要多人之间的代码共享、合并,所以需要一个远程仓库。

远程仓库工作模式
远程仓库是部署在远程服务器上,每个开发者可以把代码上传到远程仓库(push),或者把代码下载下来(pull/clone),pull和clone的区别可以参考https://blog.csdn.net/HeatDeath/article/details/79135462(转载)
在这里插入图片描述
如何操作远程仓库
我们最常用的两个大型远程仓库就是github和gitee,公司内部也可以自己构建远程仓库就像maven仓库一样。

如果我们要把本地仓库的内容传到github上,可以先进入包含.git文件夹的目录中,cmd输入:

> git remote add githubRepo https://github.com/yourUsername/yourRepository.git

此处的githubRepo是你给远程仓库的命名,可以随意取。这里的add仅仅是将本地仓库中的内容放到了远程仓库的暂存区,同样再需要输入一行push命令,将内容从暂存区放入分支中,同时本地所做过的commits的记录也会被传到远程仓库中:

> git push githubRepo master

如果要将远程仓库的内容clone下来,可以先创建一个新目录,然后cmd使用以下命令:

> git clone https://github.com/yourUsername/yourRepository.git

它会自动给你创建一个新的目录,然后这个目录中包含代码以及仓库。

如何实现代码共享
用户1编写完代码之后通过> git push githubRepo master更新远程仓库的代码版本,随后用户2在有本地仓库的目录下输入> git pull githubRepo master就实现了代码的下载与合并。

基本操作总结:
本地关联远程仓库> git remote add 标识名(githubRepo) 远程地址
将本地仓库内容上传到远程仓库> git push 标识名 master
从远程仓库下载内容到本地仓库> git pull 标识名 master
将远程仓库复制到本地,并自动形成一个本地仓库> git clone 远程地址

分支

什么是分支
分支,是版本最终存储的位置,像一条时间线,每次git commit形成一个版本,然后每个版本依次存储在分支的提交点上。
分支是由多个提交点组成,分支上会有一个指针,默认总是指向最新的提交点。同时如果在相比上一个版本的文件而言新增了一部分文件,那么没有被改动的文件在该提交点则是以链接形式存储,比如我第一次commit了一份a.txt,第二次commit只是增加了b.txt,那第二个commit中a.txt就是以一个链接的形式存在。
在这里插入图片描述
可以通过> git branch查看分支,一般都会有一个默认的主分支master,且在执行commit的时候,默认是在master分支上保存版本。
在这里插入图片描述
master分支一般不会随意commit,如果不谨慎会造成版本混乱等问题,所以需要一些开发用的分支,并在开发分支上做版本记录。只有当代码确定没有问题时,才会将开发分支上成熟的代码版本添加到master分支上。

如何创建一个新的分支

> git branch 分支名

创建完分支可以看到,其实我们使用的还是原来的主分支master(前面的*号以及绿色字体),通过> git checkout dev可以切换分支。
在这里插入图片描述
如果我们在dev中新增了一些文件之后再切换回master之后,目录的工作区会有所改变:
(dev开发分支下的工作区)
在这里插入图片描述
(master下的工作区)
在这里插入图片描述
开发用分支的一些细节
每个分支都有一个指针,默认是指向最新提交点的。
一般来说我们的开发分支都是基于master分支的,意思就是说原本你已经上线的项目是放在master上的,然后你需要新增一些内容,你就会在最新的master分支的提交点处分出来一个开发分支,所以在最开始创建开发分支时,两个分支指针所指向的提交点是同一个,它的样子如下所示:
在这里插入图片描述
当你不断在dev开发分支下进行commit时,就会呈现如下的形态:
在这里插入图片描述
如果你再dev开发分支上完善了所有的内容,决定把它送给master时,形成以下的形态(此处还有另一种形态会在后文提到):
在这里插入图片描述
查看commit日志
查看提交日志有两种方法:
简易日志:> git log --oneline
完整日志:> git log
(上为简易日志,下为完整日志)
在这里插入图片描述
合并分支
字面意思,就是将两个分支并为一个。通过> git merge 分支a来合并分支a。
合并的方式有两种:快速合并、三方合并。

  1. 快速合并(fast forward)
    如下图所示,在第四次commit的时候,新建了一个dev开发分支,并且在其上面提交过两次,这个时候你想把dev的内容合并到master中,使用> git merge dev,出现的结果是master直接将指针放到dev指针当前所在的位置,这就是快速合并。
    但一般真实开发环境中不会遇到这种情况,只有当master分支一点都没有动的时候才可以快速合并。
    在这里插入图片描述
  2. 三方合并
    在如下图所示,当master有自己的分支,dev也有多次提交的情况下,要合并就属于三方合并,也是真实开发中最常见的合并。
    在这里插入图片描述
    三方合并是指下图中的“1”,“2”,“3”,“1”是master分支与dev开发分支的分叉口,“2”是master分支在“1”的基础上进行了修改,“3”是dev开发分支在“1”的基础上进行了两次修改,所以要合并成一个新的就需要在“1”的基础上把“2”和“3”都并在一块,并在master分支上形成一个新的commit点。
    在这里插入图片描述
    可以通过查看日志来了解它的时间线构架,日志称这个过程为“Merge made by the 'recursive strategy”,也就是递归合并。并可以配合图形来查看,输入命令> git log --oneline --graph,即可看到左侧有一个竖形图形。
    在这里插入图片描述

合并冲突
当两个分支进行合并,但含有对同一个文件的修改,则在合并时会出现冲突,git无法判断该保留哪个分支对该文件的修改。
当发生冲突时,再打开冲突文件可以看到这样的内容:
在这里插入图片描述
一个是当前分支该文件的内容,一个是合并分支该文件的内容,这个时候我们要确定保留些什么内容,就直接在文件中修改即可(要把<HEAD=>dev删掉)。然后再次在主分支中进行add以及commit就算解决了冲突。

idea中操作Git

在idea中关联git
关联非常简单,打开idea的settings按照下图步骤即可:
在这里插入图片描述
然后我们可以直接对写好的Project在idea里面利用图形化操作完成仓库的创建:
在这里插入图片描述
弹出目录框之后选择要创建仓库的项目,点击ok,就可以在目录中看到.git文件被建好:
在这里插入图片描述
忽略文件
在创建仓库之前,我们有很多东西是没有必要放进仓库的,比如说.iml文件,是一些idea的工程配置文件,每个人的idea都会有这个文件;.idea文件,存放一些项目的配置信息,比如历史记录、版本控制信息等,这也是每个人都会有的,还有很多其他的文件。
那我们该如何忽略这些文件呢,首先我们在要上传进仓库的项目里新增一个.gitignore文件,在文件里写上不需要的文件、文件夹名称:
在这里插入图片描述 在这里插入图片描述
随后在按照上一小节的方法进行仓库创建,然后可以看到并不是所有文件都被标红了,标红意味着这些文件被add进暂存区但并没有实行commit,比如说上面的左图中“Maven_Spring.iml”就是白色,是因为我们在ignore文件中把所有.iml文件都给忽略了。

提交、更改文件以及放到远程仓库
在idea中可以直接commit,勾上我们需要commit的文件,提交结束,文件就不会被标红了:
在这里插入图片描述
如果新增文件或者对原有文件进行了更改,那么文件名也会变色,新增文件变为红色,被更改的文件变成蓝色,可以再做一次commit并将所有文件进行全选。

然后我们放在自己本地仓库的内容最终是需要放到公司的远程仓库或者我们自己的github上面,我们仍然在VCS选项下,找到Git,下面有一个Push选项,里面会让我们定义一个remote,你就把自己的github连接放在里面,就可把项目挪到远程仓库的分支中。
同时我们可以在idea的右下角看到一个Git:master选项,我们可以通过点击New Branch来新增我们的开发分支,在同样的地方我们还可以切换分支:
在这里插入图片描述
从远程仓库获取文件
可以直接通过idea来进行远程仓库的clone,同样在VCS下。
在这里插入图片描述
使用idea中的pull方法,下载远程仓库内容,如果是已经下载过的项目需要与远程仓库同步一下,也可以点击“Update Project”:
在这里插入图片描述
如果遇到冲突的话和我们之前讲到的冲突处理差不多,在idea中就会展示:
在这里插入图片描述

但可以看到比起之前我们手动修改,idea提供了三个选项,可以直接选择保留自己的或者保留对方的,或者修改进行合并。

其他

关于查看历史版本的方法可以参考这篇博文https://blog.csdn.net/ljl86400/article/details/80051507(转载)

以上就是所有内容

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值