Git 笔记


背景

昨晚我建了个远程库,专门放笔记的。因为只是写md,又没写代码,所以就直接用vs code去编辑了。可vs code自带的git又不知道怎么用,然后我就只好打git命令行,添加远程库等等。可是搞了半天没弄好。

今天我就复现了昨晚的场景。

昨晚是这样的,我在码云新建了个私有库,码云会自动添加md文件嘛。
而我本地是这样的:

mkdir notes
cd notes
mkdir 1711
git init //  初始化新仓库

然后就用vs code新建了md文件开始写笔记,写完了想放到码云上。不得已我就开始打命令行了

git remote add origin https://gitee.com/远程库名
git add [fileName]  //  添加文件
git commit -m [messages]  //  commit
git fetch origin master  //  取回远程库的文件到本地
git merge origin/master  //  合并,结果出错了
//  fatal: refusing to merge unrelated histories
//  加多这一段就ok :--allow-unrelated-histories
git merge origin/master --allow-unrelated-histories
git push origin master  //  推送到远程仓库

我还想有其他骚操作

  • 删除掉远程库的README.md
git rm README.md
git commit -m 删除了README.md
git push origin master
  • 添加多一个文件夹
mkdir dir
cd dir
touch 1.md 2.md 3.md
git add *.md
git commit -m 添加文件夹
git push origin master
  • 我想重命名文件
git mv oldFileName newFileName 
git commit -m 改文件名
git push origin master
  • 远程仓库的添加,删除,重命名
//  添加
git remote add origin https://gitee.com/仓库名
//  删除
git remote rm origin
//  重命名
git remote rename origin hhh
//  查看远程主机名
git remote
//  查看远程主机名和对应的地址
git remote -v
  • Git文件的状态

Git的文件是有三种状态的,已修改,已暂存,已提交。对于所在位置:工作区work,暂存区stage,仓库repository。

怎么看文件的状态呢?用命令行git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   "1711/git\347\254\224\350\256\260.md"
        modified:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   "1711/git\347\254\224\350\256\260.md"

怎么理解这一段,首先说了你跟远端的分支master是最新的,然后下面有一些文件需要被commit提交,还有一些你改动了的文件,需要用git add放入到 stage暂存区

这个意思就是说,工作区(.git文件所在的目录)里头的git笔记.md修改了,但没有放入暂存区stage,而README.md文件虽然修改了,但已经放入暂存区stage了,就差commit提交到仓库了。

  • 新建分支,合并分支

图中只有一个master分支

这里有三个版本,最新的是f30ab

图中有两个分支,master,testing

图中有两个分支,master和testing 然后HEAD指向的是我们当前所在的分支,怎么看我们所在分支是哪个呢。命令行git branch,带*星号的就是所在分支,如下:

git branch
    * master
    testing

新建分支合并分支运用场景

比方说:我们有一个项目,已经上线了,也就是说已经放到生产环境了。

这时候我们有新需求,为了不影响已上线的产品,我们开了一个分支,我们就可以在这里开发,然后测试完再推到主线上。

假如我们线上的产品有个严重的bug,这时候我们就回到主线分支,然后再新建一个分支出来去修复bug,修好了再推到主线上。

//  新建一个分支 newBranchName 并且切换到该分支上
git checkout -b newBranchName
//  相当于执行如下命令
git branch newBranchName
git checkout newBranchName

//  如下例子:
$ git checkout -b develop master
Switched to a new branch 'develop'
$ git branch
* develop
  master

利用分支进行开发工作的流程

master 为主线分支,主分支只用于发布大版本更新。develop 分支为日常开发分支。

  • 创建 develop 分支,并切换到该分支
    • git checkout -b develop master
  • 将 develop 分支发布到 master 分支
    • 切换到 master 分支 git checkout master
    • 合并分支 git merge --no-ff develop

若不加 --no-ff 参数则是这样的

Git执行&quot;快进式合并&quot;(fast-farward merge)

加上参数 --no-ff

加上参数 <code>--no-ff</code>

未完待续

参考资料


setTimeout笔记


setTimeout()是什么?

嗯,它是一个定时器。我最基础的了解是这样的,就是我们设置一个时间,等这个时间到了,就执行一个函数或者一段代码。

Syntax 语法

//  必要参数 function,可选参数 时间,形参
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
//  必要参数 function,可选参数 时间
var timeoutID = scope.setTimeout(function[, delay]);
//  必要参数 code代码段,可选参数 时间
var timeoutID = scope.setTimeout(code[, delay]);


Web前端热更新


热更新是什么?

简单来说,热更新一般是指手机里的app有小规模更新,以直接打补丁的形式更新。
相对应的,另一种更新方式就是下载新的安装包,重新安装。
所以热更新在手游里头是比较常见的,毕竟游戏应用个个都几百兆起步。

那Web前端有热更新?

按上面那个说法,Web应该是不存在热更新的。
因为网页的架构是B/S,即 浏览器+服务器 , 它不像手机app一样是 C/S 客户端+服务器
所以在网页这一块是无法推送补丁让浏览器去更新的。

那为什么我搜前端热更新有好多文章在讲?

网上大多数前端热更新讲的都是热加载 hot-loader 或者是模块热更替 HMR


ES6之let声明


  • let 的「创建」过程被提升了,但是初始化没有提升,不允许重复声明。
  • var 的「创建」和「初始化」都被提升了。
  • TDZ 暂时死区,就是不能在初始化之前,使用变量。
let x = 'global'
{
  console.log(x) // Uncaught ReferenceError: x is not defined
  let x = 1
}

console.log(x)报错了,说x没有被定义,说明x指向的是let x = 1声明的x,而不是块代码外的x变量
这就说明了let x = 1声明提升了,你觉得代码应该是这样的:

let x = 'global'
{
  let x
  console.log(x) // Uncaught ReferenceError: x is not defined
  x = 1
}