JavaScript学习笔记(三十七)-- GIT 和 GITHUB

GIT 和 GITHUB

  • 在学习之前我们要先要清楚几个东西

  • gitgithub 是两个东西,不是一个东西

  • 需要搞清楚几个词语的意思

    • 本地:我自己的终端

    • 远程:在网络那一头的终端

    • 仓库:一个被 git 管理了的文件夹

什么是 GIT

  • git 官方名称:分布式版本管理器

  • 私人解释: 就是一个管理我们文件夹的工具

    • 只不过可以保留所有的版本信息
  • 就是我们安装一个软件

    • 然后用这个软件来管理我们的一个文件夹

    • 这个文件夹被 git管理以后,我们可以对他进行各种操作

    • 保证我们写过的内容不会丢失

什么是 GITHUB

  • github是一个网站,是一个我们托管项目的平台

  • 是一个 世界级别 的大型网站

  • 也就是说,我们写的项目的 源码 可以放在上面保存,只要我们不自己删除,不会丢失

    • 就相当于百度云

    • 只不过功能更加强大,上面都是开发人员(世界级别)

  • 因为 github 只接受 git 来上传代码,所以叫做 github

  • 也就是说,我们可以通过 git 这个软件来管理我们本地的文件夹

    • 并且可以把文件夹里面的代码上传到 github 保存

    • 也可以写一个插件之类的工具,上传到 github 上面让其他开发者使用

    • 也可以从 github 上找到其他开发者写的插件之类的东西下载使用

  • 所以说,github 也是一个大型的 开源 的资源共享平台

GIT 使用

  • 刚才我们说过,git 是一个管理我们文件夹的工具

  • 那么我们就要先安装工具,再使用工具管理我们的文件夹

GIT 安装

  • 下载 git 直接到官网下载就可以

Git​git-scm.com

Git - Downloads​git-scm.com

  • 找到和操作系统对应的版本就可以了

方法一: 打开官网,直接点击下载

方法二: 打开下载中心,选择操作系统,选择下载版本

  • 下载好以后,直接双击进行安装就行

  • 一直下一步就可以,安装再默认路径就行

  • 安装完毕后检测一下安装是否成功

1、方法一: 打开 cmd 窗口,输入指令检查

# 检测 git 是否安装
$ git --version
  • 出现版本号,说明安装成功

2、方法二: 随便找个地方单机 鼠标右键,出现下图内容,说明安装成功

  • 安装完毕,接下来我们就可以开始使用了

GIT 使用

  • git 是一个软件没错,但是不是那种安装了会再桌面出现一个图标的软件

  • 而是一个需要在 命令行 进行操作的软件

  • 我们单机鼠标右键,点击 Git Bash Here

  • 会出现下图内容

  • 我们发现点开以后,就是一个 命令行窗口

  • 其实就是给我们写一些指令使用的,只不过色彩鲜艳一点

    • 使用 cmd 或者 powershell 窗口来运行 git 指令也可以

    • 只要是再终端运行就行

    • OS 操作系统直接在 终端 中运行就行

  • Git Bash Here 表示再当前目录下运行 Git Base

  • 所以,你在哪个文件夹下点击的,那么你出来的命令行窗口的目录就是哪里

  • 我们就在命令行里面使用git 来管理我们的文件夹

GIT 初始化

  • 我们希望一个文件夹被 git 管理的话,那么就要在一个文件夹下进行 git 初始化

  • 找到一个希望被 git 管理的文件夹

  • 在文件夹内单击鼠标右键,点开 Git Bash Here

  • 输入指令
    # git 初始化的指令
    $ git init

  • 然后文件夹内会多一个 .git 的文件夹(这个文件夹是一个隐藏文件夹)

  • 这个时候,我的这个 git_demo文件夹就被 git 管理了

    • git 不光管理这一个文件夹,包括所有的子文件夹和子文件都会被管理
  • 注意:** 只有当一个文件夹被 git 管理以后,我们才可以使用 git 的功能去做版本管理**

    • 也就是说,我们必须要把我们电脑中的某一个文件夹授权给 git

    • git 才能对这个文件夹里面的内容进行各种操作

    • 而 git init 就是在进行这个授权的操作

GIT 暂存区

  • 当一个文件夹被 git 管理了以后

  • git 就会对当前文件夹进行 “分区”

  • 会分为三个区域

  1. 工作区:我们书写的源码就在工作区里面

  2. 暂存区:把我们想要存储的内容放在暂存区

  3. 历史区:把暂存区里面的内容拿出来形成一个历史版本

  • 也就是说,我们需要把想成为一个版本的代码

  • 要先放在暂存区

  • 然后才能在暂存区里面放到历史去

  • 才可以生成一个版本保存下来

  • 我们要放入暂存区,要使用 git add 指令

  • 把单独一个文件放在暂存区

# 把文件夹下的 index.txt 文本放在暂存区
$ git add index.txt
  • 把单独一个文件夹放在暂存区(暂存区不能存放空文件夹)
# 把文件夹下的 ceshi文件夹 放在暂存区
$ git add ceshi/
  • 把所有文件都放在暂存区
# 把文件夹下所有的内容都放在暂存区
$ git add --all
​
# git add --all 有一个简单的写法
$ git add .
  • 全部存放的时候使用上面两个指令哪个都行

  • 把已经放在暂存区的内容在拉回到工作区

# 拉回暂存区的 index.txt 文件
$ git reset HEAD -- index.txt
​
# 拉回暂存区的 ceshi 文件夹
$ git reset HEAD -- ceshi/
​
# 拉回暂存区的 所有文件
$ git reset HEAD -- .
  • 注意:** -- 两边都有空格,拉回所有文件的时候有个** .

  • 暂存区,只是帮我们暂时存放内容,我们删除了还是会丢的

  • 要想帮我们保存下来,那么还需要把暂存区的内容放到历史区

GIT 历史区

  • git 的历史区,就是把我们暂存区里面的文件变成一个历史版本

  • 当一些文件形成一个版本的时候,就会被一直记录下来了

  • 向历史区里面添加内容的时候,必须保证 暂存区 有内容

  • 因为历史区就是把暂存区里面的内容收录进去

  • 向历史区添加内容使用 git commit -m "做一个简单的说明"

 # 把暂存区的内容放到历史区
$ git commit -m "我是第一个版本" 
  • 我们一定要写一个简单的说明

  • 因为当我们的历史版本多了以后,我们自己也记不住哪个版本做了哪些修改

  • 所以有个简单的说明会好很多

  • 这个时候历史区就有了我们的第一个版本

  • 我们使用 git log 这个指令查看版本信息

# 查看当前历史区版本信息
$ git log
  • commit:这一个版本的版本编号

  • Author:作者

  • Date:本次版本的记录时间

  • 后面的内容就是我刚才提交的时候写的说明

  • 接下来我们对文件夹内的内容进行一些修改,然后再次创建一个历史版本

  • index.txt 中的文本内容进行修改

  • hello world 改变成 你好 世界

  • 然后我们再次打印日志看一下

  • 我们发现,日志信息变成了两条,也就是我们存在着两个版本的内容了

  • 放在历史区的内容,理论上就丢不了了

  • 现在我们可以把我们本地工作区中的内容给删除了,删除以后我们进行历史回退

  • 我们使用 git reset --hard 版本编号 进行历史回退
    # 回退到第一次提交的版本
    git reset --hard ce0c17f7a703c6847552c7aaab6becea6f0197f2 ​ `# 回退到第二次提交的版本` git reset --hard abb2c4f12566440e04bc166c3285f855a37a3bb2

  • 这个时候我们就可以来回来去的玩我们的历史记录了

GIT 分支

  • git 分支,就是我们自己把我们的整个文件夹分成一个一个独立的区域

  • 比如我在开发 登录 功能的时候,可以放在login 分支下进行开发

    • 开发列表 功能的时候,可以放在 list 分支下进行开发

    • 大家互不干扰,每一个功能都是一个独立的功能分支

  • 这样开发就会好很多

  • git 在初始化的时候,会自动生成一个分支,叫做 master

  • 是表示主要分支的意思

  • 我们就可以自己开辟出很多独立分支

  • 开辟一个分支使用 git branch 分支名称 指令

# 开辟一个 login 分支
$ git branch login
  • 查看一下当前分支情况
# 查看当前分支情况
$ git branch
  • 会看到,当前有两个分支了

  • 一个是 master,一个是 login

  • 前面有个* 号,并且有高亮显示的,表示你当前所处的分支

  • 我们对 登录 功能的开发要移动到login 分支去完成

  • 我们切换所处分支使用 git checkout 分支名称

# 切换到 login 分支
$ git checkout login
  • 然后我们在整个分支上进行 登录 功能的开发

  • 开发完毕以后,我们就在当前分支上进行提交

  • 提交以后我们进行分支切换

    • 发现 master上面还是最初始的状态

    • login分支上有我们新写的 登录 功能的代码

  • 我们按照分支把所有功能都开发完毕了以后

    • 只要把所有代码都合并到 master 主分支上就行了
  • git 的合并分支,只能是把别的分支的内容合并到自己的分支上

  • 使用的指令是 git merge

# 切换到 master 分支
$ git checkout master
​
# 把 login 的内容合并到自己的分支
$ git merge login
  • 这个时候,我们刚才在 login 上开发的东西就都来到了master 主分支上

  • 如果是有多个分支的话,那么所有的最后都合并到 master 分支上的时候

  • 我们的主分支上就有完整网站的所有页面

    • 各个分支上都是单独的页面和功能
  • 这个时候我们开辟的分支就没有什么用了,就可以删除分支了

  1. 先切换到别的分支

  2. 使用指令 git branch -d 分支名称 来删除

# 先切换到别的分支
$ git checkout master
​
# 删除 login 分支
$ git branch -d login

常用的分支命名

  • 我们的分支命名也要规范一些

  • 我们有一些分支名称大家都默认是有特殊意义的

  • 比如我们之前的写的 login 分支就是不规范的分支名称

    • 而且也是不规范的分支操作
  • 常见的分支名称

    1、master:主分支,永远只存储一个可以稳定运行的版本,不能再这个分支上直接开发

    2、develop: 主要开发分支,主要用于所用功能开发的代码合并,记录一个个的完整版本

    • 包含测试版本和稳定版本

    • 不要再这个分支上进行开发

    3、feature-xxx:功能开发分支,从 develop 创建的分支

    • 主要用作某一个功能的开发

    • 以自己功能来命名就行,例如 feature-login / feature-list

    • 开发完毕后合并到 develop分支上

    4、feature-xxx-fix: 某一分支出现 bug以后,在当前分支下开启一个 fix 分支

    • 解决完bug 以后,合并到当前功能分支上

    • 如果是功能分支已经合并之后发现bug 可以直接在 develop 上开启分支

    • 修复完成之后合并到 develop 分支上

    5、hotfix-xxx: 用于紧急bug 修复

    • 直接在 master 分支上开启

    • 修复完成之后合并回 master

GIT 推送

  • 我们的所有内容已经全部保留在了本地历史区

  • 理论上是不会丢失了

    • 但是如果把文件夹删除了,还是没有了
  • 所以我们要使用 git 把我们所有的内容推送到 github 上面保存起来

  • 那么就本地文件夹就算删除了,那么远程上面还有一份,还可以拿回来使用

  • 所以我们现在就要把本地内容推送到远程

  • 这个时候我们接需要一个 github 的账号了

  • 先去 github官网 注册一个账号

开辟一个远程仓库

  • 有了 github 账号以后

  • 我们就登录 github 网站,开辟一个远程仓库

  • github 的远程也是以一个仓库一个仓库的形式来保存代码

    • 我们可以在一个 github 上保存很多的项目

    • 只要一个项目一个仓库就可以了

  • 按照下面步骤开辟仓库

1、先点击新建仓库

2、按照要求填写内容

3、出现下图表示创建仓库成功

  • 现在我们的远程仓库建立完毕了,我们就要把我们的项目代码整个上传了

添加仓库地址

  • 接下来,要使用 git 上传代码了

  • 我们先要告诉 git 上传到哪里

  • 也就是给git 添加一个上传的地址

  • 我们还是来到我们的项目文件夹

  • 使用 git remote add origin 仓库地址 来添加

# 在项目文件夹下打开 git base
# 添加仓库地址
$ git remote add origin https://github.com/guoxiang910223/ceshi1913.git
  • remote:远程的意思

  • add:添加的意思

  • origin:是一个变量名(就是指代后面一长串的地址)

上传

  • 上传到哪里的地址我们已经添加好了

  • 接下来就是上传内容了

    • 上传要保证 历史区 里面有内容

    • 上传的过程会把 历史区 里面所有的内容上传到远端

  • 我们使用 git push 指令来上传

# 上传内容
$ git push -u origin master
# 表示把内容上传到 origin 这个地址
# master 是上传到远程的 master 分支
  • -u是我们第一次的使用用到了,是为了记录一下用户名和密码

  • 下次上传的时候就不需要再写了

  • 第二次上传

    • 第二次上传的时候,因为有刚才的记录,就不需要再写 origin 和 master 了

    • 会默认传递到 origin 这个地址的 master 分支上

    • 除非你要传递到别的分支上的时候再进行书写

# 第二次上传
$ git push
  • 到这里,就完成了一次 git 推送

  • 这个时候本地的文件夹就真的可以删除了

  • 因为远程有一份我们的内容,本地的删除了,可以直接把远程的拉回来就行

GIT 克隆

  • git 克隆是指把远程仓库里面的内容克隆一份到本地

  • 可以克隆别人的 公开 的仓库,也可以克隆自己的仓库

  • 克隆别人的仓库,我们只能拿下来用,修改后不能从新上传

  • 克隆自己的仓库,我们修改后还可以再次上传更新

  • 我们先找到一个别人的仓库,或者自己的仓库(这里以 jQuery 的仓库为例)

  • 复制好地址以后,选择一个我们要存放内容的文件夹(我这里以桌面为例)

  • 直接在想存放内容的位置打开 git base

  • 输入克隆指令git clone仓库地址

# 直接克隆仓库
$ git clone https://github.com/jquery/jquery.git
  • 等待一段时间

  • 你就会发现你的文件夹里面多了一个叫做 jquery 的文件夹

  • 里面就是人家仓库的所有内容

GIT 下拉

  • 不管是你克隆下来的仓库还是别的方式弄得本地仓库

  • 当人家的代码更新以后,你想获得最新的代码

  • 我们不需要从新克隆

  • 只要拉取一次代码就可以了

  • 直接在项目文件夹里面使用指令下拉

# 拉取远程最新代码
$ git pull
  • 这样一来,你本地的仓库就可远程的仓库同步了

GIT 冲突

  • git 冲突是指在我们的上传过程中

  • 本地的版本和远程的版本不一致导致的

  • 这个时候只要先使用 git pull 拉取回来

    • 让本地和远程保持一致
  • 然后再从新上传就好了

  • 但是 git pull相对不安全,因为会自动和本地内容合并

  • 我们也可以选择使用 git fetch

# 使用 fetch 获取远程最新信息并开辟一个临时分支
$ git fetch origin master:tmp
​
# 讲当前分支和临时分支的内容进行对比
$ git diff tmp
​
# 再选择合并分支内容
$ git merge tmp

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355