git学习笔记

git和GitHub笔记

1、git

1.1 关于版本控制

目前最流行的是分布式版本控制系统

  • 服务器保存文件的所有更新版本
  • 客户端是服务器的完整备份,并不是只保留文件的最新版本

有点 =>

  • 联网运行,支持多人协作开发
  • 客户端断网后,支持离线本地提交版本更新
  • 服务器故障或损坏后,可以用任何一个客户端的备份进行恢复
1.2 git基础概念
1.2.1 什么是git

git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理

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

1.2.2 git的特性
  1. 直接记录快照,而非差异比较
  2. 近乎所有操作都是本地执行

解释:

svn是基于差异的版本控制,就是记录变化后的文件。他们存储的是一组基本文件和每个文件随时间逐步累积的差异

  • 好处:节省磁盘空间
  • 缺点:耗时、效率低
  • 在每次切换版本的时候,都需要在基本文件的基础上,应用每个差异,从而生成目标版本对应的文件

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

1.2.3 三个区域

git管理的项目,由三个区域,分别是:工作区、暂存区、git仓库

  • 工作区:处理工作的区域(批改试卷)
  • 已经完成的工作的临时存放区域,等待被提交(临时存放)
  • 最终存放的区域(放到仓库)
1.2.4 三个状态
  • 已修改——modified,表示已经修改了文件,但是还没有将修改的结果放到暂存区
  • 已暂存——staged,表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表中
  • 已提交——committed,表示文件已经安全地保存在本地地Git仓库中
1.2.5 基本工作流程
  1. 在工作区中修改文件
  2. 将你想要下次提交地更改进行暂存
  3. 提交更新,找到暂存区地文件,将快照永久性存储到git仓库
1.3 安装并配置git
1.3.1 下载git

https://git-scm.com/download/win

1.3.2 配置用户信息

第一件事情,设置自己地用户名和邮箱

git config --global user.name ""
git config --global user.email ""
// 第一个是 用户名;第二个是邮箱

如果使用了 --global 选项,那么该命令只需要执行一次,即可永久生效

1.3.3 git的全局配置文件

通过 git config --global user.name “” 和 git config --global user.email “” 配置的用户名和邮箱地址,会被写入到 C:\Users\dell.gitconfig 文件中

1.3.4 检查配置信息
# 查看所有的全局配置项
git config --list --global
# 查看指定的全局配置项
git config user.name
git config user.email
1.3.5 获取帮助信息
# 要打开 git config 命令的帮助手册
git help config

# 在终端里面打开
git config -h
1.4 git基本操作
   Ctrl+ins  复制   (ins 键盘右上角的Insert)
   Shift+ins 粘贴   (shift 键盘上最左下角CTRL键的上面一个上档转换键,也可用于中英文转换)

1.4.1 获取git仓库的两种方式
  1. 将尚未进行版本控制的本地目录转换为git仓库
  2. 从其他服务器克隆一个已经存在的git仓库
1.4.2 在现有目录中初始化仓库

如果自己有一个尚未进行版本控制的项目目录,想要用 git来控制它,需要执行如下两个步骤:

  1. 在项目目录中,通过鼠标右击打开 “ Git Bash”
  2. 执行 git init 命令将当前的目录转化为 git 仓库

git init 命令会创建一个名为 .git 的隐藏目录,这个 隐藏目录就是当前项目的git仓库,里面包含了初始的必要文件,这些文件是git仓库的必要组成部分

1.4.3 工作区文件的4种状态

四种状态分为两大类

未被GIT管理:未跟踪

  • 不被git所管理的文件

已被git管理:未修改、已修改、已暂存

  • 未修改:工作区中文件的内容和git仓库中文件的内容保持一致
  • 已修改:工作区中文件的内容和git仓库中文件的内容不一致
  • 已暂存:工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到git仓库中

git status -s

  • ?? 表示 未被跟踪的文件(红色的两个问号)
  • A 表示已经暂存的文件并且已经被跟踪(绿色的A)
  • M 表示已经跟踪文件的内容发生了变化,但是还没有放到暂存区(红色的M)(修改过的,没有放入暂存区的文件前面都有红色的M标记)
  • M 表示已经被跟踪的文件且发展变化的文件,发送到了暂存区(绿色的M)
  • D 表示 工作区、git仓库 删除了 某个文件,删除是在下次提交的时候删除想要删除的文件 (绿色的D)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BwvCq43h-1620388516841)(git笔记.assets/image-20200910134711196.png)]

GIT操作的最终结果:让工作区中的文件都处于 “未修改” 的状态

1.4.4 检查文件的状态
# git status   查看文件处于什么状态
$ git status
On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

        index.html

nothing added to commit but untracked files present (use "git add" to track)
# 注意  untracked files 表示 未被跟踪的文件
1.4.5 以精简的方式显示文件状态
# 已精简的方式显示文件状态
git status -s 
git status --short

未跟踪的文件前面有 红色的 双问号标记

# ?? 表示  未被跟踪的文件
$ git status --short
?? index.html
$ git status -s
?? index.html

1.4.6 跟踪新文件
# git add index.html 表示开始跟踪一个文件
# 表示已经跟踪了  index.html文件
$ git add index.html
# 运行 git status -s , A 表示新添加到暂存区的文件,A是绿色的 
$ git status -s
A  index.html
# Changes to be committed 这行的下面,说明已经被跟踪,并且处于暂存状态
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

        new file:   index.html



1.4.7 提交更新

现在暂存区有一个index.html 文件等待被提交到 git仓库中进行保存。可以执行git commit 命令进行提交,其中 -m 选项 后面是本次提交的消息,用来对提交的内容做进一步的描述

例如:

git commit -m "新建了index.html文件"
# 向仓库提交一个 index.html  出现下面代码则表示成功
$ git commit -m "提交了一个index.html"
[master (root-commit) e8a908f] 提交了一个index.html
 1 file changed, 14 insertions(+)
 create mode 100644 index.html

# 出现下面代表则表示:工作区文件都处于“未修改状态”,没有任何文件需要被提交
$ git status
On branch master
nothing to commit, working tree clean

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZYfQSpJ-1620388516844)(git笔记.assets/image-20200910154258909.png)]

1.4.8 对已经提交的文件进行修改

目前,index.html 文件已经被git 跟踪,并且工作区和git仓库中的index.html 文件内容保持一致 。当我们修改了工作区的index.html 内容之后,再次运行 git status 和 git status -s 命令,内容如下:

# 表示已经提交并且被修改的文件
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")
$ git status -s
 M index.html

1.4.9 暂存已经修改的文件

目前,工作区的index.html 文件已经被修改,如果要暂存这次修改,需要再次运行 git add 命令,这个命令是个多功能的命令,主要有如下三个功效

  1. 可以使用它开始跟踪新的文件,并且放到暂存区
  2. 把已经跟踪的、且已经修改的文件放到暂存区
  3. 把有冲突的文件标记为已经解决的状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IzqOsTVc-1620388516846)(git笔记.assets/image-20200910160216483.png)]

1.4.10 提交已经暂存的文件

再次运行 git commit -m “被修改的文件,已经被提交” 命令,即可将暂存区中记录的index.html 快照,提交到 git仓库中进行保存

$ git commit -m "初始化了index.html,再次提交"
[master 954c645] 初始化了index.html,再次提交
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git status
On branch master
nothing to commit, working tree clean

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiIZUvGa-1620388516848)(git笔记.assets/image-20200910162105416.png)]

1.4.11 撤销对文件的修改

撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成git仓库中所保存的版本。

操作的结果:所有的修改会丢失,且无法恢复!!!

危险性较高!!!请谨慎操作!!!

git checkout – 加上撤销文件的名字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENLJwRIm-1620388516850)(git笔记.assets/image-20200910162359099.png)]

1.4.12 向暂存区中一次性添加多个文件

如果需要被暂存的文件个数比较多,可以使用如下的命令,一次性将所有的 新增 和 修改 过的文件 加入暂存区

git add .

1.4.13 取消暂存的文件

如果需要从暂存区移动对应的文件,可以使用如下命名

git reset HEAD 要移除的文件名称

1.4.14 跳过暂存区

GIT标准的工作流程是工作区=>暂存区=>Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到Git仓库,这时候git工作流程简化为了 工作区 => git仓库

Git 提供了一个跳过使用暂存区的方式,只要在提交的时候,给 git commit 加上 -a 选项,git就会自动把所有已经跟踪过的文件暂存起来一起提交,从而跳过 git add 步骤

git commit -a -m “描述信息”

$ git status -s
 M index.css

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$ git commit -a -m "跳过暂存区,进行提交"
[master 2f99439] 跳过暂存区,进行提交
 1 file changed, 6 insertions(+)

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$ git status -s

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$ git status
On branch master
nothing to commit, working tree clean

1.4.15 移除文件

从git仓库中移除文件的方式有两种:

  1. 从git仓库和工作区中同时移除对应的文件
  2. 只从git仓库中移除指定的文件,但保留工作区的文件
# 从 git仓库中和工作区中同时移除 index.js文件
git rm -f index.js
# 只从git仓库中移除 index.css 但保留工作区中的 index.css文件
git rm --cached index.css

# 从git仓库和工作区同时删除 对应的文件
$ git rm -f index.js
rm 'index.js'

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
# 绿色的D ,表示下次提交要删除的文件
$ git status -s
D  index.js

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
# 表示只在git仓库删除的文件
$ git rm --cached index.css
rm 'index.css'

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        deleted:    index.css
        deleted:    index.js

Untracked files:
  (use "git add ..." to include in what will be committed)

        index.css


dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
# ?? 表示没有被跟踪的文件,就是工作区的文件和git的文件内容不一样
$ git status -s
D  index.css
D  index.js
?? index.css

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
# 删除上面想要删除的文件,跳过暂存区操作
$ git commit -a -m "删除index.js  在仓库中删除index.css"
[master 7585d37] 删除index.js  在仓库中删除index.css
 2 files changed, 6 deletions(-)
 delete mode 100644 index.css
 delete mode 100644 index.js

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$ git status -s
?? index.css

dell@DESKTOP-SM71TU9 MINGW64 /f/黑马年度班2020.8.30/四阶段前后端交互/第二章git和github/project_01 (master)
$

1.4.16 忽略文件

一般我们总会有些文件无需纳入 git 的管理,也不希望他们总出现在未跟踪文件列表。在这情况下,我们可以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式

文件 .gitignore 的格式规范如下

  1. 以 # 开头 的是注释
  2. 以 / 结尾的是目录、文件夹
  3. 以 / 开头防止递归
  4. 以 ! 开头表示取反
  5. 可以使用 glob 模式 进行文件和文件夹的匹配(glob指简化了的正则表达式)
1.4.17 glob 模式

所谓的 glob 模式 是指简化了的正则表达式

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

# 忽略 任何目录下  test 目录下所有的文件和文件夹
test/
  
# 忽略所有的   .a文件
*.a

# 但跟踪所有的   lib.a.  即便你前面忽略了   .a文件
!lib.a
# 只忽略当前目录下的  TODO文件,而不忽略  subdir/TODO
/TODO
# 忽略任何目录下名为  build 的 中的所有文件和文件夹
build/
# 忽略 doc/notes.txt  但是不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/  目录及其所有子目录下的 .pdf文件
doc/**/*.pdf
1.4.19 查看提交历史

按Q结束

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

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

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

# 在一行上展示最近两条提交历史的信息,并自定义输出格式
# %h表示提交的间写哈希值,%an表示作者名字,%ar表示作者修订日期,按多久以前的方式显示,   %s提交说明
git log -2 --pretty=format:"%h | %an | %ar | %s"
# 只展示最新的两条提交历史,数字可以按需进行填写
$ git log -2
commit 7585d3730a9ee2c4648efd472004a92c72e61d2f
Author: 呆呆狗 <7524246+yygddg@user.noreply.gitee.com>
Date:   Thu Sep 10 18:14:24 2020 +0800

    删除index.js  在仓库中删除index.css

commit 2f99439af28c224f4164ea9928b86a2bc384fe65
Author: 呆呆狗 <7524246+yygddg@user.noreply.gitee.com>
Date:   Thu Sep 10 17:56:53 2020 +0800

    跳过暂存区,进行提交
# 在一行上显示最近两条提交历史的信息
$ git log -2 --pretty=oneline
7585d3730a9ee2c4648efd472004a92c72e61d2f 删除index.js  在仓库中删除index.css
2f99439af28c224f4164ea9928b86a2bc384fe65 跳过暂存区,进行提交
# 在一行上展示最近两条提交历史的信息,并自定义输出格式
# %h表示提交的间写哈希值,%an表示作者名字,%ar表示作者修订日期,按多久以前的方式显示,   %s提交说明
$ git log -2 --pretty=format:"%h | %an | %ar | %s"
7585d37 | 呆呆狗 | 87 minutes ago | 删除index.js  在仓库中删除index.css
2f99439 | 呆呆狗 | 2 hours ago | 跳过暂存区,进行提交


1.4.20 回退到指定的版本
# 在一行上展示所有的提交历史
git log --pretty=oneline
# 使用 git reset --hard 命令,根据指定的id 回退到指定版本
git reset --hard id
# 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
git reflog --pretty=oneline
# 再次根据最新的提交 id  跳转到最新的版本
git reset -hard id 

1.4.21 小结
  1. 初始化git仓库的命令
    • git init
  2. 查看文件状态的命令
    • git status 或者 git status -s
  3. 一次性将所有新增和修改的文件加入暂存区的命令
    • git add .
  4. 将暂存区的文件提交到 git 仓库的命令
    • git commit -m “提交信息”
  5. 跳过暂存区 ,直接提交
    • git commit -a -m “提交信息”

2、GitHub

2.1 什么是开源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlP8FDaA-1620388516853)(git笔记.assets/image-20200910200245802.png)]

2.2 开源许可协议

常见的五种

  • BSD
  • Apache Licence 2.0
  • GPL
  • LGPL
  • MIT

GPL的特点

  • 具有传染性的一种开源协议,不允许修改后和衍生的代码作为闭源的商业软件发布和销售
  • 使用GPL的最著名的软件项目是:Linux

MIT特点:

  • 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
  • 例如 jQuery 、 node.js
2.3 为什么要开源

开源的核心思想是:我为人人,人人为我

  • 开源给使用者更多的控制权
  • 开源让学习变得容易
  • 开源才有真正的安全
2.4 开源项目托管平台

专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。

  • GitHub(全球最牛的开源项目托管平台,没有之一)
  • Gitlab(对代码的私有性支持较好,因此企业用户较多)
  • Gitee(又叫做码云。是国产的开源项目托管平台。访问速度快,纯中文界面,使用友好)

注意:以上三个开源项目托管平台,只能托管以 Git 管理的项目源代码,因此,他们的名字都以 Git 开头

2.5 什么是 GitHub

GitHub是全球最大的 开源项目托管平台 。因为只支持 git 作为唯一的版本控制工具

  1. 关注自己喜欢的开源项目,为其点赞打call
  2. 为自己喜欢的开源项目做贡献
  3. 和开源项目的作为讨论bug和提需求
  4. 把喜欢的项目复制一份作为自己的项目进行修改
  5. 创建属于自己的开源项目
  6. etc
2.6 注册GitHub账号
  1. 访问GitHub官网首页,https://github.com/
  2. 点击 “Sign up” 按钮跳转到注册页面
  3. 填写可用的 用户名、邮箱、密码
  4. 通过点击箭头的形式,将验证图片摆正
  5. 点击 “Create account ” 按钮注册新用户
  6. 登录到第三步填写的邮箱中,点击激活链接,完成注册
2.7 远程仓库的两种访问方式

HTTPS 和 SSH

  • https:零配置,但是每次访问仓库时,需要重复输入 GitHub的账号和密码才能访问成功
  • SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需要重复输入GitHub的账号和密码
  • 在实际开发中,推荐使用SSH 访问远程仓库
2.8 基于https将本地仓库上传到GitHub远程仓库中

官网上的案例

本地没有现成的git仓库时

# 使用终端命令创建 README.md文档,并写入初始内容为 # test_01
echo "# test_01" >> README.md
# 一下三行代码,时初始化本地git仓库,并将文件的修改提交到本地的git仓库中
git init
git add README.md
git commit -m "first commit"
git branch -M master # 老师未讲解,此行代码
# 将本地仓库呵远程仓库关联,并把远程仓库命名为 origin 
git remote add origin https://github.com/daidaigou-ye/test_01.git
# 将本地仓库中的内容推送到远程的GitHub仓库中
git push -u origin master
                

本地有现成的git仓库

git remote add origin https://github.com/daidaigou-ye/test_01.git
git branch -M master  # 老师未讲解,此行代码
git push -u origin master

Compressing objects: 100% (14/14), done. 表示已经上传到了远程仓库中

2.9 在本地又新建了一个文件,需要上传到远程仓库中(第二次向远程仓库提交代码)

新建了一个 index.js文件需要提交到远程仓库中

git push -u origin master 表示第一次将文件发送到GitHub远程仓库中需要执行的代码

第二次,第三次等等 需要执行 git push

$ git status -s
?? index.js

$ git add .

$ git status -s
A  index.js

$ git commit -m "第一次提交的js文件"
[master 59fb001] 绗竴娆℃彁浜ょ殑js鏂囦欢
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 index.js

$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 353 bytes | 353.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/daidaigou-ye/test_01.git
   870ce50..59fb001  master -> master

2.10 SSH key

作用:实现本地仓库和GitHub之间免登录的加密数据传输

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

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

  1. id_rsa (私钥文件,存放于客户端的电脑即可)
  2. id_rsa,pub (公钥文件,需要配置到 GitHub 中)
2.11 生成 SSH key
  1. 打开 Git Bash
  2. 粘贴如下的命令,并将 [email protected] 替换为注册GitHub账号时填写的邮箱
  3. 连续敲击三次回车键,即可在 C:\Users\用户名文件夹.ssh 目录中生成id_rsa 和 id_rsa.pub 两个文件
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/dell/.ssh/id_rsa):
Created directory '/c/Users/dell/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/dell/.ssh/id_rsa
Your public key has been saved in /c/Users/dell/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:iixpNFgM4DRFkcEpS4voJTIuZBPuRdpH1MUBgtdHvMI [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|+o+=Boo.*+.      |
|o*.* o.o +       |
|=.@ o . . .      |
|=% + . E .       |
|O.B .   S        |
|.= + . .         |
|. + o .          |
| . .             |
|                 |
+----[SHA256]-----+

2.12 配置 SSH key
  1. 使用记事本打开 id_rsa.pub 文件,复制里面的文本内容
  2. 在浏览器中登录GitHub,点击头像 => Settings => SSH and GPG Keys => New SSH key
  3. 将 id_rsa.pub 文件中的内容,粘贴到 key 对应的文本框中
  4. 在 Title 文本框中任意填写一个名称,来标识这个key从何而来
2.13 检测 配置的SSH key 是否成功
  1. 打开 git bash
  2. 输入 ssh -T [email protected]
  3. 会看到 撒行红色的代码 包含一个黄色,两个绿色
$ ssh -T git@github.com
The authenticity of host 'github.com (13.250.177.223)' 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,13.250.177.223' (RSA) to the list of known hosts.
Hi daidaigou-ye! You've successfully authenticated, but GitHub does not provide shell access.
# 配置成功
2.14 基于 SSH 将本地仓库上传到GitHub远程仓库

先把访问方式切换到 SSH

# 先关联
git remote add origin git@github.com:daidaigou-ye/test_02.git

git push -u origin master
2.15 将GitHub远程仓库的代码克隆到本地
  1. 打开git bash
  2. 执行代码:git clone 远程仓库地址
$ git clone https://github.com/daidaigou-ye/test_02.git
Cloning into 'test_02'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 247 bytes | 1024 bytes/s, done.

3、分支

3.1 分支的概念

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习 Git 的时候,另一个你正在平行宇宙里努力学习 SVN

如果两个平行宇宙互不干扰,那对现在的你也没啥影响

不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了 Git 也学会了 SVN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gd2JV9bV-1620388516854)(git笔记.assets/image-20200911120548298.png)]

3.2 分支在实际开发中的作用

进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZE0wNl8C-1620388516855)(git笔记.assets/image-20200911120932086.png)]

3.3 master 主分支

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

在实际工作中,master主分支的主要作用就是:用来保存和记录整个项目已经完成的功能代码

不允许程序员直接在master分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃

3.4 功能分支

由于程序员不能直接在 master 分支上进行功能的开发,所以就有了功能分支的概念

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldfEzYHP-1620388516856)(git笔记.assets/image-20200911123335508.png)]

3.5 查看分支列表

使用如下的命令,可以查看当前 Git 仓库中所有的分支列表

注意:分支名字前面的 * 号表示当前所处的分支

git branch
$ git branch
* master

3.6 创建新分支

使用如下的命令,可以基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一样

git branch 新分支名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KwEKN6aY-1620388516857)(git笔记.assets/image-20200911124258328.png)]

执行完创建分支后,用户当前所处的还是 master 主分支

3.7 切换分支

可以使用如下的命令,可以切换到指定的分支上进行开发

git checkout 分支名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRU4hZ2l-1620388516858)(git笔记.assets/image-20200911173306113.png)]

$ git branch
  login
* master

$ git checkout login
Switched to branch 'login'

$ git branch
* login
  master

3.8 分支的快速创建和切换

注意:分支的创建,有个不成文的约定,要在master 主分支的基础之上进行创建

使用如下的命令,可以创建指定名称的新分支,并立即切换到新分支上

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NY1pmXMW-1620388516859)(git笔记.assets/image-20200911184455306.png)]

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ git branch
  login
* master

$ git checkout -b reg
Switched to a new branch 'reg'

$ git branch
  login
  master
* reg

3.9 合并分支

功能分支的代码开发测试完毕之后,可以使用如下的命令,将完成后的代码合并到 master 主分支上

注意:假设要把C分支的代码合并到A分支,则必须线切换到A分支上,再运行 git merge 命令 来合并C分支

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pRnB4tHD-1620388516860)(git笔记.assets/image-20200911185934952.png)]

例子,要求:将login合并到master上

首先 再login分支上,写了代码,并且提交到了本地仓库
$ git status
On branch login
nothing to commit, working tree clean

切换到 想要合并到的那个分支
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

 执行 合并分支代码
$ git merge login
Updating d2b77d9..102dc4b
Fast-forward
 index.css  |  6 ++++++
 index.html | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

其实在在主分支我们没有写东西,是在login分支上写的东西,你切换到主分支的时候,其实文件大小会发生变化,
3.10 删除分支

当把功能分支的代码合并到master 主分支上以后,就可以使用如下的命令,删除对应的功能分支

git branch -d 分支名称

$ git branch -d login
Deleted branch login (was 102dc4b).

在删除这个分支的时候,先跳转到另一个分支上,然后再删除

如果有个分支,还没有被合并到主分支的时候,你用 git branch -d 分支名称,会提示你

the branch ‘分支名’ is not fully merged

if you are sure you wang to delete . run ’ git branch -D reg’ (这里的reg是分支名)

3.11 分支——遇到冲突时的分支合并

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

# 假设:再把  reg 分支合并到 master 分支期间,代码发生了冲突
git checkout master
git merge reg

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

要求:把reg 分支 合并到 master分支上(index.html在reg分支和master分支上都修改过)

# 先切换到  master分支上
$ git merge reg
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
# 当出现这个代码的时候,表示 这个index.html文件 在两个不同的分支上对同一文件进行了修改
# 下面的图片是执行上面合并代码后,出现的问题

# 解决方案
# 第一步 1:根据四个选项选择一个选项,然后保存(本次案例,选择采用当前更改)
# 第二步 2: git add .
# 第三步 3:git commit -m ""
$ git status -s
UU index.html  

$ git add .

$ git commit -m "解决了冲突,然后提交到本地仓库"


合并代码后(在两个不同的分支上对同一文件进行了修改)在vscode所显示的样子为下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFPAyfzi-1620388516861)(git笔记.assets/image-20200911220016547.png)]

3.12 分支——将本地分支推送到远程分支

如果是第一次将本地分支推送到远程仓库,需要运行如下的命令:

默认情况下远程仓库的名字就是叫做:origin

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

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

# 实际案例: 本地有一个payment分支,需要推送到远程的 origin仓库中,同时把这个分支重命名为pay
git push -u origin payment:pay

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

案例:把reg推送到GitHub远程仓库上

# 先检查一下分支
$ git branch
* master
  reg

# 把本地的reg分支推送到远程仓库上,并把这个分支重命名为register
$ git push -u origin reg:register

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igun6R1L-1620388516862)(git笔记.assets/image-20200911222624333.png)]

3.13 分支——查看远程分支列表

git remote show 远程仓库的名字

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/daidaigou-ye/test_02.git
  Push  URL: https://github.com/daidaigou-ye/test_02.git
  HEAD branch: master
  Remote branches:
    master   tracked
    register tracked
  Local branches configured for 'git pull':
    master merges with remote master
    reg    merges with remote register
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

3.14 跟踪分支

跟踪分支指的是:从远程仓库中,把远程分支下载到本地仓库中。需要执行以下代码

# 从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同
git checkout 远程分支的名称
# 示例
git checkout pay

# 从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名
git checkout -b 本地分支名称 远程仓库名称/远程分支名称
# 示例
git checkout -b payment origin/pay
$ git branch
* master
  reg

# 删除reg分支
$ git branch -d reg
Deleted branch reg (was cdbc9dc).

# 从远程仓库 克隆下来 远程仓库的某个分支
$ git checkout register
Switched to a new branch 'register'
Branch 'register' set up to track remote branch 'register' from 'origin'.


$ git branch
  master
* register

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

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

在那个分支上运行这个代码,就表示更新那个分支上对应的代码

git pull

案例: 前提,在register分支上,修改了index.js代码

$ git pull
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), 2.04 KiB | 5.00 KiB/s, done.
From https://github.com/daidaigou-ye/test_02
   cdbc9dc..cd60fa4  register   -> origin/register
Updating cdbc9dc..cd60fa4
Fast-forward
 index.js | 2 ++
 1 file changed, 2 insertions(+)

3.16 删除远程分支
# 删除远程仓库中,指定名称的远程分支
git push 远程仓库名称 --delete 远程分支名字
# 示例
git push origin --delete pay

案例:删除远程resister分支

$ git push origin --delete register
To https://github.com/daidaigou-ye/test_02.git
 - [deleted]         register

4、总结

  1. 能够掌握Git中基本命令的使用
    • git init
    • git add .
    • git commit -m “提交消息”
    • git status 和 git status -s
  2. 能够使用 GitHub 创建和维护远程仓库
    • 能够配置GitHub的SSH访问
    • 能够将本地仓库上传到 GitHub
  3. 能够掌握 git 分支的基本使用
    • git checkout -b 新分支的名称
    • git push -u origin 新分支名称
    • git checkout 分支名称
    • git branch

5、上传项目到码云并发布的基本步骤

  1. 码云创建新的仓库。 heimamm

  2. 利用git 提交 把本地网站提交到 码云新建的仓库里面

    • 在网站根目录右键-- Git Bash Here

    • 如果是第一次利用git提交,请配置好全局选项

      git config --global user.name "用户名"
      git config --global user.email "你的邮箱地址"
      
    • 初始化仓库

      git init
      
    • 把本地文件放到暂存区

      git add .
      
    • 把本地文件放到本地仓库里面

      git commit -m '提交黑马面面网站'
      
    • 链接远程仓库

      git remote add origin 你新建的仓库地址
      
    • 把本地仓库的文件推送到远程仓库 push

      git push -u origin master
      
  3. 码云部署发布静态网站

    • 在当前仓库中,点击 “服务” 菜单

    • 选择 Gitee Pages

    • 选择 “启动” 按钮

    • 稍等之后,会拿到地址,就可以利用这个地址来预览网页了

你可能感兴趣的:(前端学习笔记)