文章目录


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

1. git工作机制

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

工作区:就是你的项目在磁盘上的位置

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

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

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

2. git 常用命令

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

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

万字Git学习笔记详细到爆!!!_本地库_03

注意 那不是报错 只是提示你 这个文件没有被 add 进暂存区 导致git 无法追踪

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

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

再次查看状态就会发现不一样了

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

2.5 提交本地库

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

2.6 修改文件

步骤:修改文件->查看状态-万字Git学习笔记详细到爆!!!_ide_05再次提交到暂存区->查看状态

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

2.7 历史版本

查看版本信息

git reflog

只往本地库提交了一次 所以只有一条记录

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

有同学会发现怎么退出不了呢? 按q键就能退出了 下同

查看版本详细信息

git log

万字Git学习笔记详细到爆!!!_远程库_08

比之前的多了作者和日期 在多人协作的情况下这就很重要了

2.8 版本穿梭

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

这里我新提交了两个版本

根据 ​​git log​​ 查看下

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

如果我想回退到版本2 可以使用下面命令

git reset --hard 版本号

这里的版本号就是git随机生成的序列号 使用前几位就可以了

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

可以看到 之前的 bb3不见了

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

其实底层是类似于链表形式 每次回退版本就移动指针

万字Git学习笔记详细到爆!!!_本地库_12

3.分支操作

3.1 分支的作用

万字Git学习笔记详细到爆!!!_远程库_13

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

到后面再合并就是了

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

3.2 分支命令操作

万字Git学习笔记详细到爆!!!_远程库_14

3.2.1 查看分支

git branch -v

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

可以看到 目前就一个分支master

3.2.2 创建分支

git branch 分支名

想新增一个飞机小游戏

​git branch plane-game​

查看下

​git branch -v​

万字Git学习笔记详细到爆!!!_远程库_16

可以看到 新增了一个飞机游戏的分支

3.2.3 切换分支

git checkout 分支名

万字Git学习笔记详细到爆!!!_远程库_17

新增点内容 以便于后面合并 注意 合并前 需要将新的内容提交到本地库

3.2.4 合并分支

git merge 分支名


注意 合并分支 需要先切换到对应的分支 比如切换到master 再合并 可别傻傻的在plane-game上合并 没用的哦
万字Git学习笔记详细到爆!!!_ide_18


3.2.5 产生冲突

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

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

对于这种情况 只能靠人为来决定了

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

查看一下 哪个文件造成了冲突

万字Git学习笔记详细到爆!!!_本地库_20

打开bbtest 发现两个分支的内容进行了合并

万字Git学习笔记详细到爆!!!_远程库_21

怎样解决呢? 只需要保留我们要的 删除多余的特殊符号 再add+commit 就好了

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

4. 团队协作

4.1 团队内协作

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

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

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

4.2 跨团队协作

万字Git学习笔记详细到爆!!!_远程库_24

看图 当岳不群觉得自己的代码不够好 让东方不败修改

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

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

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

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

5. github 实践

5.1 创建远程库

登录github 右上角点击

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

随便取个名字 私有的直接创建即可

ps: 可能你网不太好 那么用gitee什么的也是一样的

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

创建完了就是这样的

很贴心 下面还教了你怎么使用命令 不过看我演示就够啦

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

你可以用两种方式将仓库克隆到本地 分别是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学习笔记详细到爆!!!_github_28

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

拉取代码

​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_rsa​​​和 ​​id_rsa.pub​​ 两个文件 证明成功了 我们只需要在github中点击setting

进入该页面

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

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

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 忽略隐藏文件

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

在 用户目录下 新增 ​​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学习笔记详细到爆!!!_远程库_32

初始化git仓库 选择当前项目

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

如果你发现其他文件都变红了 证明成功了 项目目录下也新增了 ​​.git​​ 文件夹

选择整个项目 加入暂存区就可以了 可以发现图标变绿了

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

6.3 提交代码

万字Git学习笔记详细到爆!!!_本地库_35

我再一连提交两次 可以在左下角git里看到相应的提交记录

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

因为是图形化界面 ​​checkout revision​​ 就可以切换对应的版本了

6.4 切换分支

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

如果不勾选 checkout branch 就不会切换到对应分支 这点需要注意

万字Git学习笔记详细到爆!!!_远程库_38

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

万字Git学习笔记详细到爆!!!_本地库_39

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

6.5 合并分支

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


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

对 其实就两步即可 注意 现在黄色的标签指向的是master

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

合并完成

万字Git学习笔记详细到爆!!!_本地库_41

6.6 冲突合并

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

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

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

人为演示下冲突

首先master新增

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

hotfix新增代码

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

可以看到 最后一行是不一样的 我们需要进行手动合并

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

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

选择两个都加上 会发现有了新的提示 已经没有冲突了 我们点击合并

万字Git学习笔记详细到爆!!!_远程库_45

看分支图可以很明显的发现 代码合并成功

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

7. IDEA 集成 Github

7.1 idea里登陆github

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

关于token怎么设置 ​​点击跳转设置token​

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

7.2 分享项目到 Github

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

如下所示

万字Git学习笔记详细到爆!!!_本地库_48

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

可以看到 github上有对应的仓库了

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

git相关的基本都写在这篇博文里了

最后需要强调一点

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

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

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


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