Git指南

Git简介

概述

Git是目前世界上最先进的分布式文件版本控制系统(没有之一)。对于我们java程序员而言,管理的就是代码文件版本

集中式和分布式

集中式版本控制(SVN)

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件

分布式版本控制

Git是分布式版本控制系统,那么它可以没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

Git的基本使用

创建版本库

可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
在这里插入图片描述
.git这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,可以将扩展名勾选!

​ 此处的czjk目录就是我们的:工作区,存放所有当前文档。此目录下的文件才会被Git管理

czjk中的.git目录就是我们的:本地仓库,管理并保存所有的文档变化及历史状态

添加文件并提交

  1. 添加文件
    在这里插入图片描述
  2. 接下来,我们使用 git add 命令,将文件添加到本次仓库的 : 暂存区
    在这里插入图片描述
  3. 使用 git commit 命令,将暂存区文件提交到本地仓库
    在这里插入图片描述
    注意:第一次提交需要设置邮箱,邮箱和密码 可以自定义 符合格式即可
    在这里插入图片描述
    git commit命令可以将暂存区的文件提交到版本库。
    -m参数,是本次提交的说明信息,用来注释本次提交做了些说明事情

工作区、暂存区、版本库

工作区

工作区就是你在电脑里能看到的目录。比如我们刚刚创建的dk目录,其中包含了一个隐藏目录 .git ,其它就是我们需要被管理的文件

暂存区和版本库

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
在这里插入图片描述
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改

使用暂存区的作用:

  • Git中的Commit操作它是一个原子性操作,不可以选择提交哪些文件的!
    也就是它会把暂存区的文件全部提交,而且要么全部成功,要么全部失败;

  • 那么你什么时候去选择要提交哪些文件呢?
    Commit操作是将暂存区的内容全部提交,所以我们要回到暂存区中思考;
    从工作区到暂存区,使用Git Add 文件名,我们可以选择性地向暂存区添加内容,然后将其分批提交,

  • 暂存区的意义是它将你准备提交的内容分批整体处理;

管理文件修改

被版本库管理的文件不可避免的要发生修改,此时只需要直接对文件修改即可。修改完毕后需要将文件的修改提交到版本库
在这里插入图片描述

差异比较

用git diff readme.txt命令可以查看工作区与暂存区的区别:
git diff readme.txt 工作区与暂存区比较
git diff HEAD readme.txt 工作区与本地库比较
git diff --cached readme.txt 暂存区和本地库比较

查看状态,提交修改

我们如果不确定自己的哪些文件被修改了,可以使用git status 命令,查看当前工作区的状态
在这里插入图片描述
可以清楚的看到:changes not staged for commit(修改没有被缓存,需要使用git add来进行添加操作)

我们使用git add 命令,添加到暂存区,然后再次查看状态:
在这里插入图片描述
这次提示: changes to be commited (修改需要被提交),我们使用git commit 进行提交后,再次查看状态:
在这里插入图片描述
提示说:工作区很干净,没有任何需要提交,搞定!

版本回退

现在,我们再次修改readme.txt,添加一行内容,同样使用vi
在这里插入图片描述
然后提交到版本库:
在这里插入图片描述

日志查看

我们通过 git log 命令,可以查看历史的每次提交信息:
在这里插入图片描述
可以发现,目前为止,我们已经在本地仓库中提交了3次,也就是说有3个不同版本。其中,最近的这个版本有一个标示:HEAD这就是标记当前分支的当前版本所在位置

在log中,每一个版本的前面,都有一长串随即数字:bdf6d88de6bd92d1dcc415ca862c9b2907a0160d ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交

版本回退

现在,假设我们要回到上一级版本,该如何操作呢?

首先,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD**标示,上上一个版本就是**HEAD**,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100**。

如果要从 “第三次提交” 回退到 “第二次提交” ,

我们可以使用

git reset --hard HEAD^ 命令 或者 **直接使用 **

git reset --hard 版本号 退回到指定的版本
在这里插入图片描述

查看所有关联日志

我们可以通过git reflog命令,看到以前的每次执行动作:
在这里插入图片描述
我们可以通过指定commit id 的方式,来指定HEAD的位置:

指令:git reset --hard {commit id}
在这里插入图片描述
查看日志:
在这里插入图片描述
查看文件:
在这里插入图片描述

撤销修改

撤销工作区修改

现在我们使用vi在readme.txt中添加一行数据:
在这里插入图片描述
在你提交前,你突然发现这个修改是有问题的,你打算恢复到原来的样子。怎么办?
查看状态:
在这里插入图片描述
Git提示我们,现在文件已经修改,等待被staged(暂存)。我们有两个选择:
1) 可以使用git add 来添加到暂存区,接着去提交文件

2) 可以使git checkout – 来撤销修改

所以,这里我们选择第二种方案后,再次查看状态:
在这里插入图片描述

撤销staged修改

刚才的案例中,我们修改了数据,并没有add带暂存区,处理起来还算简单。如果我们已经吧数据add 到了暂存区,又该如何处理呢?
并且添加到staged(暂存区),然后查看状态
有一个修改等待被提交,并且有一行提示:可以使用 git reset HEAD 来撤销缓存修改。

我们前面说过,git reset 命令可以进行版本回退,此处reset 指定的是HEAD ,而不是其他版本,因此就有撤销缓存修改的作用
在这里插入图片描述
撤销修改分两种情况:

1) 撤销工作区修改,使用git checkout 未add之前,将工作区文件恢复到上个版本

2) 撤销暂存区修改,分两步:

a) 使用**git reset HEAD **来撤销暂存区修改。

b) 使用git checkout **-- **来撤销工作区修改

Git常用命令

常用命令由此得出:

本地仓库常用命令:

  • 将代码提交到本地仓库 先git add 再 git commit -m “提示信息”
  • 如果后悔了 可以回退版本 git reset --hard + 版本号 版本号查看 : git log 或者 git reflog
  • git init 本地仓库初始化
  • git add 添加到暂存区
  • git commit 添加到版本库 = 本地仓库
  • git reset --hard xxxid 回退到指定版本库 更新暂存区和工作区
  • git remote add origin xxxxurl地址 连接远程仓库地址
  • git push -u origin master 推送当前本地仓库到远程仓库master分值
  • git clone xxxxurl地址 远程仓库克隆到本地

远程仓库

到目前为止,我们已经学会了如何在本机利用git进行文件版本管理,但是如果要想进行多人协作,我们就必须使用远程仓库。将本地仓库的数据同步到远程仓库,实现多人协作开发。

​ 目前比较热门的代码托管社区:GitHub,网址:https://github.com ,提供了免费的远程git仓库功能。不过网速不是特别流畅。 在国内,有很多的公司使用oschina提供的git服务:码云, https://gitee.com ,当然,我们也可以自己来搭建远程仓库

远程仓库命令

注意:

1) 如果要使用SSH协议与远程仓库同步,就必须先在本地生成公钥和私钥,然后将公钥添加到远程的SSH列表

2) 如果已经有本地仓库,并且想要与远程仓库关联,一般需要两步:

​ a) 通过git remote add origin + 远程仓库地址 进行关联

​ b) 通过git push -u origin master 推送本地仓库修改到远程仓库

3)如果没有本地仓库,先创建远程仓库,然后通过git clone + 远程仓库地址 进行克隆并创建本地仓库

4)通过git pull 拉取远程仓库的最新内容到本地仓库

5) 注意 如果远程仓库存在,必须先clone, 才可以进行仓库更新操作,不可以直接pull

5) 免密码:git config credential.helper store

分支管理

假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险.

​ 现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

​ 其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。

​ 但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

分支的创建和合并

创建分支

我们可以使用 git checkout -b 分支名 来创建并切换到新的分支:
在这里插入图片描述
你会注意到我们已经切换到了dev分支。 git checkout 加上 -b 参数,就等同于创建分支,并切换分支。相当于以下两条命令:

git branch dev # 创建分支

git checkout dev # 切换到具体分支

使用git branch 查看所有分支,当前分支前面会有一个*表示:
在这里插入图片描述

合并分支

我们使用git checkout master切换回master分支,查看内容:
在这里插入图片描述

删除分支

合并完成后,就可以放心地删除dev分支了,可以使用git branch -d dev 命令删除dev分支,dev就是具体的分支名
在这里插入图片描述

命令小结

1) 使用git branch 分支名 创建分支

2) 使用git checkout 分支名 来切换分支

3) 也可以使用 git checkout -b 分支名 来完成 创建并切换分支的操作

4) 使用git merge 分支名 来合并分支到当前分支

5) 使用git branch -d 分支名 来删除指定分支,注意:要删除一个未合并的分支。需要使用**-d**参数进行强制删除

Idea客户端提交和拉去代码

将项目创建为本地仓库

VCS --> Import into Version Control --> Create Git Repository
项目Git版本已经创建成功。
在这里插入图片描述

忽略文件

安装ignore插件,在file->settings->plugin搜索.ignore,点击Install,安装完成后就可以愉快的使用了,记得重启IDEA

提交代码(重点)

添加到暂存区

项目右键选择Git --> add
在这里插入图片描述
此时项目文件全部变成绿色,此时文件只是处于暂存区,并没有真正进入到版本库中。

提交到本地仓库

项目右键Git–> Commit Directory

在弹窗中输入Commit Message,点击commit,此时项目文件从暂存区真正进入版本库中,项目文件变成黑色
在这里插入图片描述

提交到远程仓库
新建一个远程仓库

重要说明: idea开发,要求规范:工程名称一般就是远程仓库的名称!

第二点要注意: 不要将工程推送到一个已经存在项目的远程仓库! 会报错!
一个项目对应一个远程仓库

在远程仓库创建新项目: 为了后期clone时,仓库名称就是项目名称 我们约定: 仓库名==项目名称

推送到远程仓库

右键选择项目—> Git ->Repository -> Push ,然后填写远程仓库地址。

拉取数据

在远程仓库随意修改代码:
在这里插入图片描述
在项目中,拉取代码:Git->Repository->pull,选中origin/master点击pull,则代码同步成功。

克隆远程仓库并导入idea

打开Idea,点击 Check out form Version Control,选中Git, 填入远程仓库SSH地址,输入你的远程仓库地址,点击Test,测试一下地址是否正确。点击Clone就OK了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值