Git笔记

目录

Git初识

1.为什么使用Git?

2.Git是什么?有什么用?

3.需要学习Git的什么?

Git安装

1.下载

2.安装

3.检验安装

VSCode检验安装(老师推荐使用这个终端)

Bash终端检验安装

控制台检验安装

4.Git配置用户名信息

5.教Git认识中文(黑马删视频了,唉)

6.Git Bash设置右键菜单栏(否则不能粘贴)

7.Git Bash文件目录切换

Git仓库

1.创建Git仓库

Git三个区域

1.将要更新的文件添加至暂存区

2.更改文件内容

3.保存

4.查看暂存区列表

5.确认产生一次版本记录,commit提交

6.查看效果

7.查看提交历史

8.查看提交列表

Git文件状态

1.查看文件状态命令

Git暂存区作用

1.暂存区恢复文件

2.移除暂存区文件

Git忽略文件

Git提交所有文件

Git换行符问题

Git还原版本 (难点)

1.soft模式

2.mixed模式(默认模式)

3.hard模式

Git删除文件

1.Git删除缓存区命令

Git分支(重点)

1.什么是分支?

 2.分支的使用场景

3.初步使用

4.查看分支列表

5.创建新分支(功能分支)

6.切换分支

7.创建并切换分支

8.合并分支

双人协同开发

三人协同开发

9.合并冲突

制作一个合并冲突

解决方案

10.删除分支

11.将本地分支push到远程仓库(暂时还没学远程仓库,先记着)

12.查看远程仓库中所有的分支列表

13.跟踪分支

14.拉取远程分支的最新版代码

15.删除远程分支

16.总结

Git远程仓库

1.本地Git仓库添加远程仓库

2.查看本地Git仓库有哪些远程仓库地址

3.移除添加过的远程仓库地址

4.gitee许可证我选择哪个?

5.开源自己的仓库

6.如果Gitee网站换号了,如何继续使用原来的仓库?

7.远程仓库-克隆(重点)

前提

8.模拟多人协作开发(重点)

创建两个空文件夹

分别克隆Gitee上的项目

02开发一个模块后保存提交推送

之后01开发另一个模块,拉取达到同步的目的

Git命令合集


Git初识

1.为什么使用Git?

之前做开发的时候,如果需要更新代码的内容,上线新的版本,需要手动复制,就是这样

既麻烦又不清楚每一次更新了什么内容


2.Git是什么?有什么用?

  • Git是一款软件,一款免费开源,分布式的代码版本控制系统,帮助开发团队维护代码
  • 作用:记录代码内容,切换代码版本,多人开发时高效合并代码内容

3.需要学习Git的什么?

  • 如果是个人开发使用:Git基础命令和概念
  • 如果是多人共享使用:团队开发同一个项目的代码版本管理


Git安装

1.下载

本章节使用的版本是 v2.44.0 -64bit.exe

官网:Git - Downloading Package (git-scm.com)

2.安装

无脑安装就行,全部默认下一步,有好多选项乱七八糟的英文看不懂就不看了

安装结束后,多了一个控制台,应该是bash终端(git专用)

3.检验安装

VSCode检验安装(老师推荐使用这个终端)

安装成功后,重启VSCode发现多了一个控制台选项Git Bash

Bash终端检验安装

控制台检验安装


4.Git配置用户名信息

配置:用户名和邮箱,应用在每次提交代码版本时表明自己身份

git config --global user.name "用户名"
git config --global user.email "邮箱" 

5.教Git认识中文(黑马删视频了,唉)

参考教程:GIT使用log命令显示中文乱码 - 颜子歌 - 博客园 (cnblogs.com)

不配置这一步的话,Git不认识中文就乱码

解决方案:

  • 首先,让Git学会怎么解码中文
// 提交信息时,Git 会使用 UTF-8 编码来保存这些信息
git config --global i18n.commitencoding utf-8
// 在输出日志(例如 git log 命令输出)时使用 UTF-8 编码
git config --global i18n.logoutputencoding utf-8
  • 然后,让系统知道怎么解码中文
$ export LESSCHARSET=utf-8
  • 再教Git Bash解码中文

 然后就没问题啦


6.Git Bash设置右键菜单栏(否则不能粘贴)

ctrl/shift + insert 复制/粘贴

7.Git Bash文件目录切换

cf 文件夹/

8.检验配置

git config -l

9.账号密码持久化

输入这行后,以后还会再输入一次

git config --global credential.helper store

 


Git仓库

Git 仓库(repository):记录文件状态内容的地方,存储着修改的历史记录

就是一个隐藏的.git文件夹

1.创建Git仓库

有两种方式

  • 将本机的一个文件夹转换为Git仓库:命令 git init
  • 从其他服务器上克隆Git仓库

暂时先使用第一种:在本地创建Git仓库

git init


Git三个区域

工作区:实际开发时操作的文件夹

暂存区:保存之前的准备区域(暂存改动过的文件),在 .git/index中

版本库:提交并保存暂存区中的内容,产生一个版本快照,在 .git/objects中

命令作用
git add 文件名(相对路径)暂存指定文件
git add .暂存所有改动的文件
git commit -m "注释说明"提交并保存,产生版本快照

1.将要更新的文件添加至暂存区

版本库 .git/objects中产生一个 40为hash值命名的文件

我并没有提交只是做一次保存,也产生了版本快照?怎么跟老师说的有点不一样呢?

2.更改文件内容

3.保存

  • 可以只保存一个改动过的文件 git add 文件名
  • 也可以保存目录中所有改动过的文件 git add .
git add webpack_code/public/index.html


4.查看暂存区列表

git ls-files


5.确认产生一次版本记录,commit提交

6.查看效果

版本库里多了一堆版本快照

还多了一个文件记录每次更改的内容

双击打开文件

还多了HEAD日志

7.查看提交历史

git log --oneline

8.查看提交列表

git ls-tree -r HEAD


Git文件状态

Git 文件 2 种状态:

未跟踪:新文件,从未被 Git 管理过

已跟踪:Git 已经知道和管理的文件

第一列是暂存区状态

第二列是工作区状态

文件状态概念场景
未跟踪(U)从未被 Git 管理过新文件
新添加(A)第一次被 Git 暂存之前版本记录无此文件
未修改('')【为空】三个区域统一提交保存后
已修改(M)工作区内容变化修改了内容产生

案例阐述:新建一个CSS文件(U),修改后 git add保存到暂存区,此时这个文件从U变成A,因为是第一次被暂存,还未提交过,没有产生版本记录,那么此时误删CSS文件,不好意思,无法恢复。

没有被git add过的文件会一直显示U,文件只有在第一次git add过的时候才会显示A,再存就不显示了

1.查看文件状态命令

创建一个css文件,git add保存到暂存区后,启动命令

git status -s // 查看暂存区和工作区所有文件的状态

修改css文件

Git暂存区作用

暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦

如果没有暂存区就会多次commit提交,正常情况下,我们只会多次修改,到最终才会提交一次,这就是暂存区的作用

1.暂存区恢复文件

将文件git add到暂存区后,再次更改工作区文件,改了半天突然不想改了,怎么办呢?

通过这行命令将暂存区的旧文件覆盖工作区刚改的新文件。

git restore 目标文件

2.移除暂存区文件

之前git add存的文件不想要了怎么办?

git rm --cached 目标文件

Git忽略文件

概念:.gitignore 文件可以让 git 彻底忽略跟踪指定文件

目的:让 git 仓库更小更快,避免重复无意义的文件管理

例如:

1.系统或软件自动生成的文件

2.编译产生的结果文件

3.运行时生成的日志文件,缓存文件,临时文件等

4.涉密文件,密码,秘钥等文件

创建:

1.项目根目录新建 .gitignore 文件

2.填入相应配置来忽略指定文件

注意:如果文件已经被暂存区跟踪过,可以从暂存区移除即,所以尽量.gitignore文件在项目刚开始就写好

.gitignore

# 忽略 npm下载的第三方包
node_modules
# 忽略分发文件夹
dist
# 忽略VSCode配置文件
.vscode
# 忽略秘钥文件
*.pem
*cer
# 忽略日志文件
*.log
# 忽略.history历史文件夹(可能是一个插件生成的)
.history

Git提交所有文件

也不是所有文件啦,就是给一整个前端项目提交上去,除了.gitignore文件里忽略的

Git换行符问题

参考我的这篇博客:Git win与linux换行符转换的问题-CSDN博客


Git还原版本 (难点)

黑马老师讲的不清楚,也可能是我脑子有问题,最后找到了一个视频,通俗易懂的:Git reset三种常用模式区别和用法_哔哩哔哩_bilibili

概念:把版本库某个版本对应的内容快照,恢复到工作区/暂存区

还原命令有三个:

  • git reset --soft
  • git reset --mixed
  • git reset --hard

后面的参数可以是版本号(推荐),还有其他等等,反正我也不用

  • git reset HEAD~<n>

git reset的三个模式,都能达到这种目的,不过不同的模式对于工作区和暂存区的影响是不同的

假如只提交一个文件 README.md,修改了两次,保存了三次,提交了三次

1.soft模式

只会覆盖HEAD的文件集合,只会将版本库(HEAD)里的 被reset的文件的版本回退到了v2版本,工作区和缓存区的版本依旧是最新版

如果想回到reset之前的状态,也就是全部最新版,只需要再次执行commit,将HEADv2升级到v3

2.mixed模式(默认模式)

保留了工作区的文件版本不回退了,但是将缓存区和版本库里的文件版本回退了

如果想回到reset之前的状态,也就是全部最新版,需要先git add将缓存区v2 升级到 v3,再commit将HEADv2升级到v3

3.hard模式

工作区、缓存区和HEAD全部还原旧版本,就是说,重新开发,之前的不要了


Git删除文件

不想让自己的项目中出现某个文件了,怎么办呢?

需要保证工作区、缓存区和HEAD中都不在出现这个文件

  1. 第一步,先手动删除工作区的文件
  2. 第二步,有两种办法,第一种,直接git add .覆盖缓存区;也可以手动删除缓存区的文件【git rm -cached 文件名】
  3. 第三步,此时工作区和缓存区都没有那个文件了,直接commit

1.Git删除缓存区命令

git rm -cached 文件名

Git分支(重点)

1.什么是分支?

        什么是分支呢?在电影中常常有平行宇宙这个概念,而分支就像是平行宇宙,不同的分支互不影响。

        分支常用于多人协作开发时,每个开发人员在自己的分支上实现相应功能,当功能实现后,再将分支内容合并到主分支上,这样大大提高了开发效率。

在初始化本地Git仓库时,Git已经默认帮我们创建了一个名字叫master/main分支,通常我们把这个master分支叫做主分支

开发的时候,可能不止master/main一个指针,还可能有public、content什么的


 2.分支的使用场景

1.开发新需求:我正在开发登录页面,开发完成后,公司招了一个新前端,要他继续开发新功能,我不想让他影响我已经开发好的部分,就会创建一个新分支给他,他将在我开发好的那一版本C5接着开发,等他开发完成,就合并

2.修补bug,同上,最终合并

3.初步使用

  • 假设已经开发了一部分了,并add到缓存区,commit到HEAD了

  • 创建并切换到content分支

  • 开发新功能,开发哈哈哈页面

  • 添加到缓存区

  • commit到HEAD

  • 再开发一个css样式表,同样的操作

  • 切换master分支,回到最初的样子(重点)

说明,分支可以保证多人协同开发互不影响


4.查看分支列表

// 查看本地分支
git branch
// 查看远程分支
git branch -r
// 查看本地分支 和 远程分支
git branch -a


5.创建新分支(功能分支)

 专门用来开发新功能的分支,临时从master主分支上分叉出来的。当分支被合并时,功能分支就不在有意义了。所以功能分支的生命周期短

git branch 分支名称


6.切换分支

当我们需要写编写功能代码时,我们就需要切换到该分支上书写,如果直接在主分支上写会不利于代码的维护

git checkout 分支名称


7.创建并切换分支

git checkout -b 分支名称


8.合并分支

在功能分支上书写完全部代码后,我们需要将功能分支上的内容合并到主分支上,让主分支拥有该功能。注意:在合并分支时,我们不能处于需要合并的分支上。例如想要将C分支合并到A分支上,必须先切换到A分支上,再合并C分支。

而且,合并的分支并不会被删除,只是将功能合并

git merge 分支名称

双人协同开发

三人协同开发

教程(这个黑马老师讲的比较清楚):Git-13.分支-合并与提交_哔哩哔哩_bilibili


9.合并冲突

需求1:基于 master 新建 content分支,完成发布文章业务,然后修改内容页面的 html 文件的 title 标签,并提交一次

需求2:切换到 master,也在修改内容页面的 html 文件的 title 标签,并提交一次

冲突:把 content分支合并到 master 回来,产生合并冲突

概念:不同分支中,对同一个文件的同一部分修改,Git 无法干净的合并,产生合并冲突

制作一个合并冲突

解决方案

1.跟小组成员讨论一下,到底要哪个,还是都保留,然后用VSCode提供的工具处理

2.保存提交,合并成功删除content


10.删除分支

当功能分支被合并后,该分支就没有意义了,此时需要删除分支。删除时也不能处于即将被删除的分支上例如想要将C分支删除,当前不能处于C分支上。

git branch -d 分支名称  // 若还有未被合并的分支会提示

git branch -D 分支名称 // 强制删除分支


11.将本地分支push到远程仓库(暂时还没学远程仓库,先记着)

第一次将本地分支推送到远程仓库:

// -u表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u参数
git push -u [远程仓库的别名] [本地分支名称]:[远程分支名称]

// 实际案例:
git push -u origin payment:pay

// 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化
git push -u origin payment

12.查看远程仓库中所有的分支列表

git remote show 远程仓库名称

13.跟踪分支

git checkout 远程分支的名称

14.拉取远程分支的最新版代码

git pull

15.删除远程分支

 git push 远程仓库名称 --delete 远程分支名称

16.总结

        其实在真正进行项目开发时,我们并不会只开一个核心分支,一般是master分支和develop两个核心分支,在必要时还会开启relase分支进行bug测试。在实际开发中按需要创建、合并分支。

        另外在团队协作开发时,我们每天都需要将本地git仓库上传到远程仓库。


Git远程仓库

通俗来说,就是将本地仓库复制一份到网络服务器上

概念:托管在因特网或其他网络中的你的项目的版本库

作用:保存版本库的历史记录,多人协作

创建:公司自己服务器 / 第三方托管平台(Gitee,GitLab,GitHub...

1.本地Git仓库添加远程仓库

本章节使用Gitee码云来管理仓库

 工作台 - Gitee.com

// 本地Git仓库添加远程仓库原点地址, 别名随便写
git remote add 远程仓库别名 远程仓库地址

// 例如:git remote add origin https://gitee.com/lidongxu/work.git

// 本地Git仓库推送版本记录到远程仓库
git push --set-upstream 远程仓库别名 本地分支名:远程分支名

// 例如:git push -set-upstream origin master:master
// 关联多个远程时,通过 -u 指定默认分支,则可以使用 git push 直接推送指定的默认分支

简写:git push -u origin master

第一次使用会弹出登录框,填写gitee账号密码,给邮箱私有化关掉,否则不等登录

建立成功


2.查看本地Git仓库有哪些远程仓库地址

git remote -v

3.移除添加过的远程仓库地址

git remote remove 远程仓库别名

4.gitee许可证我选择哪个?

5.开源自己的仓库

开发完后,可以开源什么的

6.如果Gitee网站换号了,如何继续使用原来的仓库?

win10搜索,凭据管理器(我也没经历过,先记下来)

给这个删了,再访问远程仓库就可以重新输入新的账号密码了

7.远程仓库-克隆(重点)

克隆:拷贝一个Git仓库到本地,进行使用

// 例如 git clone https://gitee.com/lidongxu/work.git
git clone 远程仓库地址

效果:在运行命令所在文件夹,生成work项目文件夹(包含版本库,并映射到暂存区和工作区)

前提
  • Git本地仓库与远程仓库建立连接
  • 仓库公开随意克隆,推送(push)需要身为仓库团队成员

  • 新建一个空白文件夹

  • 打开Gitee随便找一个项目复制.git地址

  • 在空白文件夹右键打开Git Bash,输入git clone

  • 项目下载下来了,进入有.git的目录查看日志

  • 用VSCode打开项目

8.模拟多人协作开发(重点)

1.02开发代码 -> 工作区 -> 暂存区 -> 提交 -> 拉取(可选)-> 推送

2.01 -> 拉取(后续也可以开发代码 -> ... -> 推送)

3.想要看到别人同步上去的最新内容:git pull origin master 等价于

git fetch origin master:master(获取远程分支记录到本地,未合并)

git merge origin/master (把远程分支记录合并到所在分支下)

推送与拉取

// git push 远程仓库别名 远程仓库主分支:本地分支
git push origin master:content

// git pull 远程仓库别名 远程仓库主分支:本地分支
git pull origin master:content


// 本地Git仓库推送版本记录到远程仓库
git push --set-upstream 远程仓库别名 远程分支名:本地分支名

// 例如:git push -set-upstream origin master:master
// 关联多个远程时,通过 -u 指定默认分支,则可以使用 git push 直接推送指定的默认分支

简写:git push -u origin master
创建两个空文件夹


分别克隆Gitee上的项目


02开发一个模块后保存提交推送

02开发 -> 工作区更新 ->暂存区同步更新 ->本地版本库同步更新 ->远程版本库同步更新

之后01开发另一个模块,拉取达到同步的目的

第二天01接着开发,要先拉取

此时01的代码也会同步更改

9.Git标签

10.IDEA中集成Git

确保本地安装了Git,再进行配置

解除Git对项目的管理
  1. 手动删除.git
  2. IDEA设置

将锐鸡歪麦交给新远程仓库管理
  1. 由于 本地仓库与远程仓库没有共同的提交历史,而远程仓库已经存在文件(readme.md),为了防止这两个仓库的历史不会交叉,需要先拉取,加上参数:--allow-unrelated-histories
  2. 当你从一个完全独立的 Git 仓库(如新创建的远程仓库)拉取内容时,通常会导致 Git 报错,提示无法合并,因为没有共同的父提交。加上 --allow-unrelated-histories 参数可以绕过这个限制,使得 Git 允许合并这些不相关的历史记录

1.创建一个远程仓库

2.给本地项目初始化一个本地仓库

3.将本地仓库添加到远程仓库

git add remote [给远程仓库起个别名] [远程仓库链接]

4.检查是否添加成功

git remote -v

5.确认win凭证

6.将项目添加本地仓库的暂存区

git add *

7.检查是否添加成功

git ls-files

8.将本地暂存区提交到本地版本库

git commit -m "description ..."

9.检查是否提交成功

git log --oneline

10.无障碍拉取远程仓库

git pull [远程仓库别名] [远程仓库分支]:[本地仓库分支] --allow-unrelated-histories

11.将本地版本库提交到远程仓库

git push [远程仓库别名] [远程仓库分支]:[本地仓库分支]


Git命令合集

命令作用注意
git -v查看 git 版本
git init初始化 git 仓库
git add 文件标识暂存某个文件文件标识以终端为起始的相对路径
git add .暂存所有文件
git commit -m '说明注释'提交产生版本记录每次提交,把暂存区内容快照一份
git status查看文件状态 - 详细信息
git status -s查看文件状态 - 简略信息第一列是暂存区状态,第二列是工作区状态
git ls-files查看暂存区文件列表
git restore 文件标识从暂存区恢复到工作区如果文件标识为 . 则恢复所有文件
git rm --cached 文件标识从暂存区移除文件不让 git 跟踪文件变化
git log查看提交记录 - 详细信息
git log --oneline查看提交记录 - 简略信息版本号 分支指针 提交时说明注释
命令作用注意
git reflog --oneline查看完整历史 - 简略消息包括提交,切换,回退等所有记录
git reset 版本号切换版本代码到暂存区和工作区--soft 模式保留暂存区和工作区原本内容 --hard 模式不保留暂存区和工作区原本内容 --mixed 模式不保留暂存区,工作区保留(默认) 先覆盖到暂存区,再用暂存区对比覆盖工作区
git branch 分支名创建分支
git branch查看本地分支
git branch -d 分支名删除分支请确保记录已经合并到别的分支下,再删除分支
git checkout 分支名切换分支
git checkout -b 分支名创建并立刻切换分支
git merge 分支名把分支提交历史记录合并到当前所在分支
命令作用注意
git remote add 远程仓库别名 远程仓库地址添加远程仓库地址别名唯一,地址是 .git 结尾的网址
git remote -v查看远程仓库地址
git remote remove 远程仓库别名删除远程仓库地址
git pull 远程仓库别名 分支名拉取完整写法:git pull 远程仓库别名 远程分支名:本地分支名 等价于:git fetch 和 git merge
git push 远程仓库别名 分支名推送完整写法:git push 远程仓库别名 本地分支名:远程分支名 -u:建立通道后以后可以简写 git push
git pull --rebase 远程仓库别名 分支名拉取合并合并没有关系的记录
git clone 远程仓库地址克隆从0得到一个远程的Git仓库到本地使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值