DayNode(Git)

303 阅读11分钟

知识点小结

image.png

  1. 本地仓库操作
- 1.1 初始化仓库
git init

- 1.2 追踪要托管的文件
git add .

- 1.3 提交到本地仓库
git commit -m 'init project'
  1. 远程仓库操作
- 2.1 关联远程仓库
git remote add origin SSH信息

- 2.2 首次提交到远程仓库
git push -u origin master
  1. 本地仓库 新建分支

- 3.1 创建并切换到 `login` 分支
git checkout -b login

- 3.2 在该分支上 的工作区 编写代码,直至该分支的功能完成

- 3.3 查看一下分支 是否为login
git branch
  1. 将login分支保存到本地仓库,并推送至远程仓库
- 4.1 添加到暂存区
git add .

- 4.2 进行提交到本地仓库
git commit -m'完成login分支的功能'

- 4.3 推送到远程仓库的login分支
git push -u origin login
  1. 再在 本地 合并分支,并推送到 远程 的主分支
- 5.1 切换到主分支
git checkout master

- 5.2 合并分支
git merge login

- 5.3 推送到远程仓库的主分支
git push

1. git基础概念

Git 是一个开源的分布式版本控制系统

特点:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能高可用性

1.1 git安装

git安装 配置用户信息

git config --global user.name "itheima"
git config --global user.email "itheima@itcast.cn"

检查配置信息

# 查看所有的全局配置项
git config --list --global
# 查看指定的全局配置项
git config user.name
git config user.email

1.2 git特性

① 直接记录快照(完整备份),而非差异比较

  • Git 快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

    • 缺点: 占用磁盘空间较大
    • 优点: 版本切换时非常快
    • 特点: 空间换时间 ② 近乎所有操作都是本地执行
  • 断网后依旧可以在本地对项目进行版本管理

  • 联网后,把本地修改的记录同步到云端服务器即可

1.3 git区域|状态

git三个区域: 工作区、暂存区、Git 仓库 截屏2021-07-07 下午3.18.32.png git三种状态:

  • 已修改 modified

    • 表示修改了文件,但还没将修改的结果放到暂存区
  • 已暂存 staged

    • 表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表中
  • 已提交 committed

    • 表示文件已经安全地保存在本地的 Git 仓库中

注意:

  • 文件只要被放到暂存区过了,就处于【被跟踪状态】
  • 工作区有【被跟踪】和【未被跟踪】的两种状态
  • 只要文件修改过,就在工作区了,需要重新提交到暂存区
  • 只有【被跟踪】的文件,才能通过git commit -a -m'备注'绕过暂存区,将工作区的文件提交到仓库

2. git基本操作

常见git命令.jpg

2.1 系统操作

安装权限

sudo

命令快捷键

上箭头--上个命令
下箭头--下个命令

切换路径

// 切换到下一级
cd 文件名

// 切换到上一级文件夹
cd ../文件名

显示隐藏的文件

// 快捷键
shift+command+. 

2.2 git操作

截屏2021-07-07 下午2.41.58.png

初始化仓库

git init

查看当前项目的状态

git status

// 以精简的方式显示文件状态 -s是--short的简写
git status -s

红色【??】--未跟踪的文件
红色【M】--已修改,但还没放到暂存区中
绿色【M】--已修改,且已放到暂存区中
绿色【A】--新增文件,已放到暂存区
【D】--删除标记

将文件添加到本地仓库的暂存区

// 添加单个文件
git add 文件名(包含后缀)
// 添加所有文件
git add .

暂存区的文件生成一个版本放到仓库

git commit -m'备注'

// 将`工作区`的文件直接提交到`仓库`(绕过暂存区)
git commit -a -m'备注'

撤销对文件的修改(撤销后文件在工作区)

#注意:撤销了之后,文件无法恢复
git checkout -- index.html

取消暂存的文件

git reset HEAD 文件名

移除文件

1. 从git仓库和工作区中 同时移除文件
// 将工作区的文件删除,且在暂存区中 标记该文件为 删除【绿D】(在仓库里还没有真正被删除)
git rm -f 01.js
// 生成新的版本,并将暂存区 标记为 删除【绿D】的文件删除后,从此该文件真正被删除
git commit -m'删除了01.js文件'


2. 只从git中移除 在工作区中保留文件
git rm --cached 02.js

.gitignore忽略文件

有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。

① 以 # 开头的是注释

② 以 / 结尾的是目录

③ 以 / 开头防止递归

④ 以 ! 开头表示取反

⑤ 可以使用 glob 模式进行文件和文件夹的匹配(glob 指简化了的正则表达式)

  • 星号 * 匹配零个或多个任意字符
  • [abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)
  • 问号 ? 只匹配一个任意字符
  • 两个星号 ** 表示匹配任意中间目录(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)
  • 在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)

忽略清单.png

查看提交历史

# 按时间先后顺序列出所有的提交历史,最近的提交在最上面
git log

# 只展示最新的两条提交历史,数字可以按需进行填写
git log -2

# 在一行上展示最近两条提交历史的信息
git log -2 --pretty=oneline

# 在一行上展示最近两条提交历史信息,并自定义输出的格式
# &h 提交的简写哈希值  %an 作者名字  %ar 作者修订日志  %s 提交说明
git log -2 --pretty=format:"%h | %an | %ar | %s"

回退到指定的版本

# 【查看当前和之前的版本】在一行上展示所有的提交历史
git log --pretty=oneline

# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
git reset --hard <CommitID>

# 【查看所有版本】在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
git reflog --pretty=oneline

# 再次根据最新的提交 ID,跳转到最新的版本
git reset --hard <CommitID>

3. 开源

开源和闭源.png

  • 开源是指不仅提供程序还提供程序的源代码

  • 闭源是只提供程序,不提供源代码

3.1 开源许可协议

Open Source License,为了限制使用者的使用范围保护作者的权利

  • BSD(Berkeley Software Distribution)
  • Apache Licence 2.0
  • GPL(GNU General Public License) (⭐⭐⭐)
    • 具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
    • 使用 GPL 的最著名的软件项目是:Linux
  • LGPL(GNU Lesser General Public License)
  • MIT(Massachusetts Institute of Technology, MIT) (⭐⭐⭐)
    • 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
    • 使用 MIT 的软件项目有:jqueryNode.js

4. gitee

查看远程仓库的提交历史:项目->统计->提交

4.1 将本地仓库提交到远程仓库

00管理本地仓库中的远程地址.png

00远程分支操作.png 注意:

  • 如果文件没有修改,生成新的版本,就不能推到远程仓库中
  • 如果工作区更改了,要先提交到本地仓库,才能提交到远程仓库

4.1.1 基于HTTPS

1. 关联远程仓库
git remote add 别名 远程仓库地址

git remote add origin HTTPS信息

git remote add originSSH SSH信息

- 查看origin
git remote

- 查看HTTPS信息
git remote get-url origin master

- 查看SSH信息
git remote get-url originSSH master

2. 首次提交到远程仓库
git push -u origin master

非首次提交
git push

如果都存在,默认是通过https提交,如果要通过ssh提交
git push -u originSSH master

3. 删除已经建立的联系
git remote remove origin 

4.1.2 基于SSH key(推荐)

截屏2021-07-08 下午2.44.08.png

00远程仓库的两种验证方式.png

03使用公钥私钥验证整份的原理.png SSH key作用:实现本地仓库和 Github 之间免登录的加密数据传输。

SSH key好处:免登录身份认证、数据加密传输。

SSH key两部分组成,分别是:

id_rsa(私钥文件,存放于客户端的电脑中即可)

id_rsa.pub(公钥文件,需要配置到 Github 中) 生成公钥

找到ssh文件夹下的id_rsa.pub文件

$open ~/.ssh

生成 sshkey

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  
// 注意:这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。

查看 ~/.ssh/id_rsa.pub 文件内容,

cat ~/.ssh/id_rsa.pub

将公钥复制添加到远程仓库中(gitee/github)

4.2 将远程仓库克隆到本地

作用

  1. 创建项目文件夹,并‘解压’当前下载的版本,放到项目文件夹中
  2. 创建本地仓库会克隆远程仓库的所有版本历史
  3. 为本地仓库添加了远程仓库地址origin-当前下载使用的额地址
git clone 远程仓库的地址

03.4【非常重要】使用ssh方式与远程仓库交流整体逻辑图.png

5. GIT本地分支

01【重要】分支图解.png

5.1 master 主分支

作用:用来保存和记录整个项目已完成的功能代码

因此,不允许程序员直接在 master 分支上修改代码,容易导致整个项目崩溃。

5.2 功能分支

专门用来开发新功能的分支,它是临时从 master 主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到 master 主分支上

功能分支.png

5.3 分支命令操作

注意:只要文件修改了,就需要提交到缓存区于仓库

查看分支列表

分支名字前面的 * 号表示当前所处的分支。

git branch

创建新分支

基于当前分支,创建一个新的分支,不会切换分支,此时,新分支中的代码和当前分支完全一样

git branch 分支名称

切换分支

注意:切换分支时,会切换工作区代码

git checkout 分支名称

创建并切换分支

# -b 表示创建一个新分支
# checkout 表示切换到刚才新建的分支上
git checkout -b 分支名称

合并分支

注意:要先切换分支,再合并

# 1. 切换到 master 分支
git checkout master
# 2. 在master 分支上运行 git merge 命令,将 login 分支的代码合班到 master 分支
git merge login

删除本地仓库的分支

需要在主分支上删除

git branch -d 分支名称

解决分支合并时的冲突问题

如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法干净的合并它们。 需要打开这些包含冲突的文件然后手动解决冲突

解决冲突参考

# 假设:在把 login 分支合并到 master 分支期间
git checkout master
git merge login

# 打开包含冲突的文件,手动解决冲突之后,再执行如下命令
git add .
git commit -m "解决了分支合并冲突的问题"

5.4 远程仓库分支操作

05三种与远程仓库交互的方式.png

将本地分支推送到远程仓库

04远程仓库提交.png

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


# 实际案例
git push -u origin payment:pay
git push -u origin login// 本地分支名字与远程分支名字一样

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

**注意:**第一次推送分支需要带 -u 参数,此后可以直接使用 git push 推送代码到远程分支。

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

git remote show 远程仓库名称

跟踪分支(⭐⭐⭐)

从远程仓库中,把远程分支下载到本地仓库中。

# 示例
git checkout pay

# 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 远程仓库名称/远程分支名称

# 示例
git checkout -b payment origin/pay

拉取远程分支的最新的代码

# 从远程仓库,拉取当前分支最新的代码,保持当前分支的代码和远程分支代码一致
git pull

删除远程仓库的分支

# 删除远程仓库中,制定名称的远程分支
git push 远程仓库名称 --delete 远程分支名称

# 示例
git push origin --delete login

提交到远程仓库冲突

截屏2021-07-11 上午9.20.43.png