文章目录
- 一、Git简介
- 二、windows与linux双环境安装git
- 三、git的入门级命令
- 四、文件的几种状态
- 五、git分支
- 六、Git中的log命令
- 七、文件对比利器--git diff
- 7.1 diff -->difference的缩写,用于比较差异
- 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 用途
- 8.2 图解原理
- 8.3 git reset HEAD 文件名 移除不必要的添加到暂存区的文件![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fed3a0c05ea06df40a11e356203912b0.png)
- 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指向指定的提交,暂存区跟工作区都会改变
- 九、 分支合并及冲突解决
- 十、git的标签
- 十一、.gitignore文件
一、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?
- 命令行会了,图形界面的操作时完全没问题的,反之,则不然
- 有些地方如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是这样来的:
-
打开GitHub网站登录自己的gihub账号;https://github.com
-
点击用户图小旁边的小三角,找到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 文件名 移除不必要的添加到暂存区的文件![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fed3a0c05ea06df40a11e356203912b0.png)
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到远程仓库