侧边栏壁纸
博主头像
机智的爆爆哥

欢迎来到爆爆哥的博客哦

  • 累计撰写 60 篇文章
  • 累计创建 18 个标签
  • 累计收到 50 条评论

万字Git学习笔记详细到爆!!!

机智的爆爆哥
2021-10-11 / 1 评论 / 10 点赞 / 730 阅读 / 7,965 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2021-10-11,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在这里感谢下尚硅谷 视频是 2021-04-26 发的 还很新哦

视频地址跳转

百度网盘资料地址

提取码:xd8z

因为之前安装过,所以介绍 安装什么的就不提了 记点关键的

1. git工作机制

在这里插入图片描述
工作区:就是你的项目在磁盘上的位置

暂存区:git add 以后的临时存放位置 必须先add 再commit

本地库:记录已经在本地库生成了 你干了什么坏事 这上面都会写着 无法撤销 除非删除整个项目

ps:历史版本是不能被删除的 如 v1 v2 v3 v3是基于v2的 所以v2版本删除不了

2. git 常用命令

在这里插入图片描述

2.1 签名的作用

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。

Git 首次安装必须设置一下用户签名,否则无法提交代码。

⚠️ 注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系

示例

git config --global user.name bb
git config --global user.email 102992294@qq.com
cat ~/.gitconfig                                 
[user]
	name = bb
	email = 102992294@qq.com

在家目录的 .gitconfig 文件下可以查看是否设置成功

2.2 初始化本地库

新建一个文件夹 在文件夹下

git init

出现这行代表创建成功

Initialized empty Git repository in /Users/edy/work/gitResponsitory/gitdemo/.git

你会发现在文件夹下会出现一个隐藏目录 .git 注意这个文件不要进行任何改动

2.3 查看本地库状态

首次查看(工作区没有任何文件)

git status

On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

新增文件查看

touch bbtest

在这里插入图片描述
注意 那不是报错 只是提示你 这个文件没有被 add 进暂存区 导致git 无法追踪

2.4 将工作区的文件添加到暂存区

git add 文件名
# 添加所有文件 后面跟点号
git add .

再次查看状态就会发现不一样了
在这里插入图片描述

2.5 提交本地库

# 加文件名是提交对应文件 省略则是提交全部文件
git commit -m "日志信息xxxxx" 文件名

2.6 修改文件

步骤:修改文件->查看状态-在这里插入图片描述再次提交到暂存区->查看状态
在这里插入图片描述

2.7 历史版本

查看版本信息

git reflog

只往本地库提交了一次 所以只有一条记录
在这里插入图片描述
有同学会发现怎么退出不了呢? 按q键就能退出了 下同

查看版本详细信息

git log

在这里插入图片描述
比之前的多了作者和日期 在多人协作的情况下这就很重要了

2.8 版本穿梭

顾名思义 就是回退到之前的版本 必须是你提交到本地库的才可以

这里我新提交了两个版本

根据 git log 查看下
在这里插入图片描述
如果我想回退到版本2 可以使用下面命令

git reset --hard 版本号

这里的版本号就是git随机生成的序列号 使用前几位就可以了
在这里插入图片描述
可以看到 之前的 bb3不见了
在这里插入图片描述
其实底层是类似于链表形式 每次回退版本就移动指针
在这里插入图片描述

3.分支操作

3.1 分支的作用

在这里插入图片描述

看图 上面已经写的很明白了 如果想新增什么功能 就新建一个分支 这样的好处是不影响主分支的运行

到后面再合并就是了

况且 如果多人协作 你弄一个master 很容易造成开发提交代码的混乱

3.2 分支命令操作

在这里插入图片描述

3.2.1 查看分支

git branch -v

在这里插入图片描述
可以看到 目前就一个分支master

3.2.2 创建分支

git branch 分支名

想新增一个飞机小游戏

git branch plane-game

查看下

git branch -v
在这里插入图片描述
可以看到 新增了一个飞机游戏的分支

3.2.3 切换分支

git checkout 分支名

在这里插入图片描述
新增点内容 以便于后面合并 注意 合并前 需要将新的内容提交到本地库

3.2.4 合并分支

git merge 分支名

注意 合并分支 需要先切换到对应的分支 比如切换到master 再合并 可别傻傻的在plane-game上合并 没用的哦
在这里插入图片描述

3.2.5 产生冲突

什么情况下会产生冲突呢?

就是不同的分支 修改了同一个文件 那么git如何区分该选用哪一个呢

对于这种情况 只能靠人为来决定了
在这里插入图片描述
查看一下 哪个文件造成了冲突
在这里插入图片描述

打开bbtest 发现两个分支的内容进行了合并
在这里插入图片描述
怎样解决呢? 只需要保留我们要的 删除多余的特殊符号 再add+commit 就好了

在这里插入图片描述

4. 团队协作

4.1 团队内协作

在这里插入图片描述

当某人初始代码上传后 就push到远程库 而其他人clone后 就可以对代码进行修改 之后再push

而再次push时是会失败的 因为远程库发生了更新 所以需要线pull 拉取后再推送才可以

4.2 跨团队协作

在这里插入图片描述
看图 当岳不群觉得自己的代码不够好 让东方不败修改

那看在令狐冲的面子上 那就改改吧

东方不败先fork 进自己的远程库 然后克隆 可能会升级好几个版本

等到最终修改完成 push进远程库 然后 pull request 向岳不群提出申请 说 修改好了

岳不群审核过后 再合并分支 pull 拉到自己的本地 慢慢研究。。。

5. github 实践

5.1 创建远程库

登录github 右上角点击
在这里插入图片描述
随便取个名字 私有的直接创建即可

ps: 可能你网不太好 那么用gitee什么的也是一样的
在这里插入图片描述
创建完了就是这样的

很贴心 下面还教了你怎么使用命令 不过看我演示就够啦
在这里插入图片描述

你可以用两种方式将仓库克隆到本地 分别是https和 ssh

5.2 克隆远程仓库

首先要克隆到本地 我使用的是https的方式

git clone xxxxxxxx.git

提示你 输入用户名和密码 一般克隆其实是不需要的 但是我是私有库

git clone https://github.com.cnpmjs.org/Strong-bb/git-demo.git
Cloning into 'git-demo'...
Username for 'https://github.com.cnpmjs.org': 1029922944@qq.com
Password for 'https://1029922944@qq.com@github.com.cnpmjs.org': 
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com.cnpmjs.org/Strong-bb/git-demo.git/'

但提示说 截止到2021.8.13 已经不支持用户名密码来克隆仓库了而需要采用私人的密钥

解决办法

点击这个链接 按步骤创建私人密钥即可

再次克隆 输入用户名 密码就是生成的token

git clone https://github.com.cnpmjs.org/Strong-bb/git-demo.git
Cloning into 'git-demo'...
Username for 'https://github.com.cnpmjs.org': Strong-bb
Password for 'https://Strong-bb@github.com.cnpmjs.org': 
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

克隆成功

5.3 给仓库取别名

看到上面一长串地址了吧 为了便于记忆 咱们可以取别名

那么下次pull push clone什么的 都不用复制那么一长串的地址了

其实也就两个命令

git remote -v 查看当前所有远程地址别名

git remote add 别名 远程地址

来演示下

git remote -v

origin	https://github.com.cnpmjs.org/Strong-bb/git-demo.git (fetch)
origin	https://github.com.cnpmjs.org/Strong-bb/git-demo.git (push)

显示两个地址 一个是拉取的地址 一个是推送的地址

新增别名

git remote add git-demo https://github.com/Strong-bb/git-demo.git

再次查看

➜  git-demo git:(main) git remote -v      
     
git-demo	https://github.com/Strong-bb/git-demo.git (fetch)
git-demo	https://github.com/Strong-bb/git-demo.git (push)
origin	https://github.com.cnpmjs.org/Strong-bb/git-demo.git (fetch)
origin	https://github.com.cnpmjs.org/Strong-bb/git-demo.git (push)

当你下次克隆的时候 直接 git clone git-demo 即可 前提是必须登陆过的

5.4 推送到远程仓库

命令:git push 别名/地址 分支名


➜  git-demo git:(main) ✗ git add .
➜  git-demo git:(main) ✗ git commit -m "add random xxx"
[main ff2fb50] add random xxx
 1 file changed, 10 insertions(+)
➜  git-demo git:(main) git push git-demo main        
^C


➜  git-demo git:(main) git push git-demo2 main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 267 bytes | 267.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com.cnpmjs.org/Strong-bb/git-demo.git
   fb6d581..ff2fb50  main -> main

注意 推送前需要 先add commit 才行 不然白推送了

细心的小伙伴可以看到 我推送的是 git-demo 因为我又使用了github加速的地址

原先的地址实在是推送不上去 建议国内的小伙伴直接用gitee什么的即可 都是一样的

ps: github 现在默认主分支为main

5.5 拉取远程库

如果我们在网页端修改或者提交了什么东西

亦或者是别人新提交了代码

本地库是不能实时同步的所以要先同步远程库代码 否则咱们本地库新增的代码也无法提交 会报错

示例如下

在这里插入图片描述
在这里插入图片描述
拉取代码

git pull 别名/地址 分支名

➜  git-demo git:(main) git pull git-demo2 main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com.cnpmjs.org/Strong-bb/git-demo
 * branch            main       -> FETCH_HEAD
   ff2fb50..49f0686  main       -> git-demo2/main
Updating ff2fb50..49f0686
Fast-forward
 xixi.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 xixi.txt

可以看到 最后几行 将xixi.txt 文件新增了

5.6 使用ssh

ssh可以免密操作 相当于使用密钥 对比下 你电脑中的密钥与github账户里的密钥是相同的

那么你就有这个权限

在对应的用户目录下 复制下面命令 生成对应的.ssh 文件 邮箱换成自己的即可

连按3次回车 即可生成

➜  ~ ssh-keygen -t rsa -C 1029922944@qq.com
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/edy/.ssh/id_rsa): 
Created directory '/Users/edy/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/edy/.ssh/id_rsa.
Your public key has been saved in /Users/edy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ry/yEAa46fztN9Pdd4ZPQ+roLGa1d5skuuCJoj1wr2s 1029922944@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|   .             |
|  . .            |
|   o .           |
|  o   o S      . |
| o . o . . .  o  |
|  o o o  oo..+ +.|
|   ..E.oB==.=.=o*|
|   .+=B==B+*o..*+|
+----[SHA256]-----+
➜  ~ 

我使用的是mac 所以对应的文件夹在 /Users/edy/.ssh 这里 你们也可以自己找找

会生成id_rsaid_rsa.pub 两个文件 证明成功了 我们只需要在github中点击setting

进入该页面
在这里插入图片描述
在这里插入图片描述
pull一下 注意 是否确定连接

不要回车 不要回车 不要回车

输入 yes 即可 否则会报错

git pull git@github.com:Strong-bb/git-demo.git main
The authenticity of host 'github.com (140.82.112.4)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.112.4' (RSA) to the list of known hosts.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:Strong-bb/git-demo
 * branch            main       -> FETCH_HEAD
Updating 49f0686..4a7e753
Fast-forward
 bb.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

6. Git 集成 IDEA

6.1 忽略隐藏文件

我们提交的代码 有些东西其实是不需要提交的 比如说 .ideatarget 文件等 所以需要配置下 哪些东西不需要提交

在 用户目录下 新增 git.ignore 文件

vim git.ignore 其实只要后缀是 .ignore即可 前缀是无所谓的

复制下面内容 即可

# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml

还没完 还需要配置下

原先就有一个 .gitconfig文件 编辑下

新增以下内容 我的用户目录跟你的肯定是不一样的 这点需要注意

[core]
excludesfile =/Users/edy/git.ignore

细心的小伙伴可能会发现 Springboot会自动生成 .ignore 文件 效果是一样的 且自动帮你设置了哪些东西要忽略 所以其实这个可做可不做 但是需要补充可以往里面加

6.2 git配置及初始化仓库

好了 准备工作已经做好 直接进入 idea 新建项目

需要在git里设置对应的运行程序

如果找不到 git目录的 可以输入 which git 找到对应的目录
在这里插入图片描述

初始化git仓库 选择当前项目
在这里插入图片描述
如果你发现其他文件都变红了 证明成功了 项目目录下也新增了 .git 文件夹

选择整个项目 加入暂存区就可以了 可以发现图标变绿了
在这里插入图片描述

6.3 提交代码

在这里插入图片描述

我再一连提交两次 可以在左下角git里看到相应的提交记录
在这里插入图片描述
因为是图形化界面 checkout revision 就可以切换对应的版本了

6.4 切换分支

在这里插入图片描述
如果不勾选 checkout branch 就不会切换到对应分支 这点需要注意

在这里插入图片描述

hot-fix里随便写点代码 提交下

在这里插入图片描述

可以看到 hot-fix 用用master里的所有历史提交记录 然后往后延伸 而对master是没有任何影响的

6.5 合并分支

热修复完成 我们需要将热修的分支合并到主分支 需要哪几步操作?

  • 先切换到主分支
  • 点击hot-fix 进行合并

对 其实就两步即可 注意 现在黄色的标签指向的是master
在这里插入图片描述
合并完成
在这里插入图片描述

6.6 冲突合并

但是 不是所有东西都是我们预想的那么好的

比如说 你在master上修改了代码 hotfix上也修改了代码 合并的时候并不是简单的增量操作

而是需要你自己选择 哪些进行合并 哪些进行舍弃

人为演示下冲突

首先master新增
在这里插入图片描述

hotfix新增代码
在这里插入图片描述
可以看到 最后一行是不一样的 我们需要进行手动合并

再次回到master分支 进行合并操作 会发生什么呢?

在这里插入图片描述
选择两个都加上 会发现有了新的提示 已经没有冲突了 我们点击合并
在这里插入图片描述
看分支图可以很明显的发现 代码合并成功

在这里插入图片描述

7. IDEA 集成 Github

7.1 idea里登陆github

这里直接跳转到我的浏览器 登录下就有了 如果没有跳转 就使用token

关于token怎么设置 点击跳转设置token
在这里插入图片描述

7.2 分享项目到 Github

因为有了插件 其实并不需要我们在 Github中再创建仓库 再克隆了 直接分享即可

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

在这里插入图片描述
可以看到 github上有对应的仓库了
在这里插入图片描述
git相关的基本都写在这篇博文里了

最后需要强调一点

一个成熟的程序员 在对自己的代码进行修改前 一定要先同步下远程仓库 然后再新增 保证自己准备动手写的代码的前面部分 一定是远程库中有的 否则这个冲突就很难弄了

一个好的习惯就是 上班前 写 pull一下代码 再开始写

近万字的记录 还好坚持下来了 嘻嘻

无论对谁太过热情,就增加了不被珍惜的概率。倘若没有过度的欢喜,便不会有极度的悲伤。

0

评论