大神带你玩转后端开发神器Git版本管理工具——一篇文章精通git系列版本控制工具(全球最大的同性交友网站:https://github.com/)(本片已完结)

文章目录

一、Git简介

1.1 git是什么呢?

维基百科给出的定义: git是一个分布式版本控制软件,最初由(Linus Torvalds)创作
什么是版本控制?
项目经理与程序员的恩怨情仇​ 企业真实案例:开发了a功能,之后项目所要改成b功能,开发完之后又要改c功能,最后又说还是用回a功能。​ 没有git等版本控制软件之前,如何做版本控制。​ 有了git之后,如何做版本控制。

1.2 git的作用是什么?

版本控制 团队协作

1.3 git的优势哪里?

同类型软件有svn、cvs,git
相比于他们最大的优势就在于git是分布式的
​企业真实案例:svn服务器欠费,急需发版本,非常麻烦​ 。
在这里插入图片描述
Git 允许多个远程仓库存在,使得这样一种工作流成为可能:每个开发者拥有自己仓库的写权限和其他所有人仓库的读权限。 这种情形下通常会有个代表`‘官方’'项目的权威的仓库。 要为这个项目做贡献,你需要从该项目克隆出一个自己的公开仓库,然后将自己的修改推送上去。 接着你可以请求官方仓库的维护者拉取更新合并到主项目。 维护者可以将你的仓库作为远程仓库添加进来,在本地测试你的变更,将其合并入他们的分支并推送回官方仓库。

初识github

全球最大的同性交友网站:https://github.com/

二、windows与linux双环境安装git

2.1 windows环境安装git

下载git​
到git官网上下载,自行选择合适系统的 https://git-scm.com/​
如果是win版本的,直接按默认安装即可

2.2 linux环境安装git

2.2.1 yum命令安装

yum install gityum install 安装的git不是最新版本,如需最新版本需要自行编译

2.2.2 编译git源码安装

到下面的网站下载合适的版本​ https://mirrors.edge.kernel.org/pub/software/scm/git/

2.2.3 安装git的依赖项

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker

2.2.4 移除已经安装的git

yum remove git
cd git 解压目录

2.2.5 预编译git

./configure --prefix=/usr/local/git_2.9.5

2.2.6编译并安装git

make && make install

2.2.7 将git的脚本软连接到/usr/bin/ 目录下

ln -s /usr/local/git_2.9.5/bin/* /usr/bin/

2.2.8 git安装完成

三、git的入门级命令

在这里插入图片描述
工作区:写代码的地方
暂存区:变更文件暂存的地方
本地仓库:本地的一个仓库
远程仓库:不在本地,在网络上的仓库,如github,gitlab

3.1 为什么建议使用命令行的方式操作git?

  1. 命令行会了,图形界面的操作时完全没问题的,反之,则不然​
  2. 有些地方如linux服务器,没有图形界面,如果碰到问题需要使用git,不会命令行操作啥都干不了

3.2 git 本地操作

git --help​ 调出Git的帮助文档​
git +命令 --help​ 查看某个具体命令的帮助文档​
git --version​ 查看git的版本​

3.2.1 git init​ 生成空的本地仓库​

在这里插入图片描述

3.2.2 git add​ 将文件添加到暂存区

在这里插入图片描述

3.2.3 初次commit之前,需要配置用户邮箱及用户名,使用以下命令

git config --global user.email “you@example.com”
git config --global user.name “Your Name”

3.2.4 git commit

在这里插入图片描述

将暂存区里的文件提交到本地仓库
在这里插入图片描述

3.3 git 远程仓库操作

3.3.1 登录github,新建一个仓库

在这里插入图片描述
在这里插入图片描述

3.3.2 红色部分为之前说的本地仓库部分

在这里插入图片描述

3.3.3 git branch -M main

是用来更改分支名的
首先确认当前分支

> git branch
* main

果然,master 分支不见了,变成了 main。推测 -M 参数是用来分支改名的。
查看一下 git 文档:

git help branch

With a -m or -M option, will be renamed to . If exists, -M must be used to force the rename to happen.

确实如此。

3.3.4 git remote

用于管理远程仓库

3.3.5 git push -u origin main

往名字为origin的仓库的main分支上提交变更

3.3.6 git fetch

拉取远程仓库的变更到本地仓库
在这里插入图片描述

3.3.7 git merge origin/main

将远程的变更,合并到本地仓库的main分支

3.3.8 git pull

不建议使用 等同于fetch之后merge

3.3.9 正式提交代码(这里没有修改分支名字,依旧master)

git remote add origin https://github.com/406766467/shop-manager.git
git push -u origin master
提示登录Github
在这里插入图片描述
推送成功!
在这里插入图片描述

3.3.10 如果登录失败,再试一次,会弹灰色的长框让你输入

提示你输入username,确认以后再输入password,这里的username和password是这样来的:

  1. 打开GitHub网站登录自己的gihub账号;https://github.com

  2. 点击用户图小旁边的小三角,找到settings,打开它
    在这里插入图片描述

找到Developer settings,找到Personal access tokens,找到Generate new token
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

填写第二次要输入的usernuserame,并勾选权限,生成token
在这里插入图片描述
最终填写的usernuserame(用户名) 和生成的tokens(密码)就是第二次需要填写用户名和密码 。
在这里插入图片描述
然后我们再次推送就成功了

四、文件的几种状态

4.1 状态之间的转换

在这里插入图片描述

4.2 git status

用于查看git的状态

4.2.1 在根目录新建一个文件 test.txt ,发现处于untracked状态.

在这里插入图片描述

4.2.2 执行get add test.txt命令,进入staged状态

在这里插入图片描述

4.2.3 执行git commit -m “***” 命令,进入unmodified状态

在这里插入图片描述

4.2.4 修改test.txt文件以后,变为modified状态

在这里插入图片描述

4.3 git rm 用于git文件的删除操作​

如果只是 git rm --cache 仅删除暂存区里的文件​
如果不加–cache 会删除工作区里的文件 并提交到暂存区
在这里插入图片描述

4.4 git checkout

直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
在这里插入图片描述

4.5 文件状态变换总结

新建文件—>Untracked
使用add命令将新建的文件加入到暂存区—>Staged
使用commit命令将暂存区的文件提交到本地仓库—>Unmodified
如果对Unmodified状态的文件进行修改—> modified​
如果对Unmodified状态的文件进行remove操作—>Untracked

五、git分支

5.1 什么是分支?

软件项目中启动一套单独的开发线的方法

5.2 为什么使用git?

可以很好的避免版本兼容开发的问题,避免不同版本之间的相互影响​
封装一个开发阶段​
解决bug的时候新建分支,用于对该bug的研究

5.3 git中跟分支相关的命令

git branch 分支名
git branch 不加任何参数,列出所有的分支,分支前面有*号,代表该分支为当前所在分支
在这里插入图片描述

创建分支的时候,分支名不用使用特殊符号

git branch -d 分支名
不能删除当前所在的分支

修改分支名字 git branch -m 旧分支名 新分支名
在这里插入图片描述

git checkout 分支名 切换分支
在这里插入图片描述
如果在分支上面对文件进行修改之后,没有commit就切换到另外一个分支b, 这个时候会报错,因为没有commit的文件在切换分支之后会不覆盖。所以Git 报错提示。

git checkout -f 分支名 强制切换到分支
如果当前有为提交的变更,会直接丢弃 -f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行

六、Git中的log命令

6.1 log命令的作用

用于查看git的提交历史

6.2 git log(- 参数)命令显示的信息的具体含义

commit e94abb7308f529b3394bff928486b96b08094fa1 (origin/master)  **----校验和  commit id​** 
Author: 406766467 <60053477+406766467@users.noreply.github.com> **----作者跟邮箱概要信息​** 
Date:   Tue Jan 26 15:49:09 2021 +0800    **----提交时间**
Update ShopManagerApplication.java  **----commit的时候,使用-m选项说写一段概要说明**

日常在使用commit的时候,-m选项所写得内容一定不能随便写​ ,正确写法:“修改了登陆的bug”、“新增用户管理中心”

v2 --commit的时候,使用-m选项说写一段概要说明​ 日常在使用commit的时候,-m选项所写得内容一定不能随便写​ “修改了登陆的bug”–》“新增用户管理中心”

git log -数字 表示查看最近几次的提交

git log -p -2 显示最近两次提交的不同点

git log --author 查看具体某个作者的提交

git log --online 输出简要的信息

git log --graph 以一个简单的线串联起整个提交历史

git log 输出信息的定制

七、文件对比利器–git diff

add是添加到暂存区,commit是添加到当前分支

7.1 diff -->difference的缩写,用于比较差异

使用场景
解决冲突​ 制作补丁

使用命令将数据写入两个txt文件中:
在这里插入图片描述

7.2 git diff 不加任何参数 用于比较当前工作区跟暂存区的差异

在这里插入图片描述

7.2 git diff --cached 或者–staged 用于比较当前分支和暂存区的差异

在这里插入图片描述

7.4 git diff HEAD 用于比较当前工作区和当前分支的差异(同理,刚刚多的333在工作区和暂存区,分支没有,所以差异还是333)

在这里插入图片描述

7.5 git diff 分支名 查看当前分支跟指定的分支的差异

在这里插入图片描述

7.6 git diff 分支名1 分支名2 查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别

7.7 git diff 文件名 查看指定文件的差异

7.8 git diff commitid1 commitid2 用于列出两个历史提交的差异

7.9 git diff --stat 用于罗列有变更的文件

在这里插入图片描述

八、 git更改状态

8.1 用途

将不必要的文件add
上次提交觉得是错的
不想改变暂存区内容,只是想调整提交的信息
版本回滚

8.2 图解原理

HEAD是一个指针,指向当前master的版本
在这里插入图片描述

8.3 git reset HEAD 文件名 移除不必要的添加到暂存区的文件在这里插入图片描述

8.4 git reset HEAD^ 或者 commitid 去掉上一次的提交

8.5 git reset --soft HEAD^ 修改上次提交的信息 即commit -m “修改这里的内容”

8.6 git reset --soft 只是将HEAD引用指向指定的提交,工作区跟暂存区的内容不会改变

8.7 git reset --mixed (默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变

8.8 git reset --hard 将HEAD指向指定的提交,暂存区跟工作区都会改变

九、 分支合并及冲突解决

在这里插入图片描述

9.1 git merge 分支名,拿指定的分支名与当前分支进行合并

在这里插入图片描述在这里插入图片描述
发现 Java文件没有了
在这里插入图片描述
那么,我们合并master和b1分支
在这里插入图片描述
发现文件又回来了
在这里插入图片描述

9.2 git diff --name-only --diff-filter=U 用于查看产生冲突的文件

9.2.1 产生冲突

切换到b1分支
在这里插入图片描述
在b1分支中修改一个方法:
在这里插入图片描述

提交到b1分支
在这里插入图片描述
切换到master分支
在这里插入图片描述
在master分支修改一个方法:
在这里插入图片描述
提交到master分支
在这里插入图片描述
关键的一步,合并两个分支:出现问题了 冲突产生
在这里插入图片描述
在这里插入图片描述

9.2.2 万一看不出哪个文件冲突,使用命令git diff --name-only --diff-filter=U查看冲突文件

在这里插入图片描述

十、git的标签

10.1 git tag

不加任何参数 表示显示标签(按字母序) 非按时间

10.2 git tag 标签名

默认是给最近一次提交打上标签

10.3 git tag 标签名 commitId

给响应的提交打上标签
在这里插入图片描述

10.4 git show 标签名

显示该标签相关的那次提价的相关信息
在这里插入图片描述

10.5 git tag -d 标签名

删除该标签

10.6 git push 远程分支名 标签名

把某个标签(必须是本地已存在的,否则推动失败) 推送到远程分支

10.7 删除远程标签的步骤

删除本地标签 git tag -d 标签名
在删除远程的 git push origin :refs/tags/标签名

十一、.gitignore文件

11.1 为什么要使用.gitignore 文件

大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,对不必要的文件进行忽略,使其不被git追踪

一把情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队成员把与项目无关的文件,传到远程服务器上

.log 表示忽略项目中所有以.log结尾的文件​ 123?.log 表示忽略项目中所有以123加任意字符的文件​ /error.log 表示忽略项目中根目录中的error.log 这个文件​ src/main/test/ 表示忽略/src/main/test/目录下的所有文件​ *.class​ **/java/ 匹配所有java目录下的所有文件​ !/error.log 表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定

11.2 对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。

红色不想要的:
在这里插入图片描述
可以看出这些文件都可能被提交
在这里插入图片描述
创建.gitignore文件
在这里插入图片描述
然后再查看文件状态:
在这里插入图片描述

11.3 git rm --cached 文件名

从暂存区删除某个文件

11.4 git rm -rf --cached 文件夹

表示递归删除暂存区该文件夹的所有东西

11.5 如果远程仓库有了.idea或者target文件该怎么解决?

使用git rm -rf --cached .idea/git rm -rf --cached target/ 递归删除暂存区的这两个数据
然后 commmit push 就好了

最后把.gitignore文件也add进去 commit push到远程仓库

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java天下第1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值