#### Git指令
1. 创建版本库
```
# 在当前目录创建一个空的git代码库
git init
# 在当前目录创建一个名为maigic-data的文件夹,然后在其中创建一个空的git代码库
git init [magic-data]
# 下载一个项目和它的整个代码历史
git clone [url]
```
2. 配置
```
# 设置用户姓名
git config [--global] user.name "username"
# 设置用户邮箱
git config [--global] user.email "email@user.name"
# 配置默认文本编辑器,当Git 需要你输入信息时会调用它
git config --global core.editor vim
# 为status配置别名st,这样git status就可以写成git st
git config --global alias.st status
# 查看当前仓库的所有配置信息
git config --list
# 查看当前仓库的用户名信息
git config user.name
# 编辑全局配置文件(用户名和e-mail信息就记录在其中) 所在目录:c:/users//.gitconfig
git config -e --global
# 编辑当前仓库的配置文件 所在目录:.git\\config
git config -e
# 获取帮助
git --help <verb>
```
3. 增加/删除/提交/撤销
```
# 添加文件到暂存区
git add <file>
# 将当前目录下(递归子目录)所有文件加入到暂存区
git add .
# 将当前目录下(递归子目录)所有追踪状态的文件加入到暂存区
git add -u .
# 将所有txt后缀的文件加入到暂存区
git add *.txt
# 删除工作区文件,并且将这次删除放入暂存区(若文件在工作区或暂存区中有修改,命令会执行失败)
git rm <file>
# 强制删除工作区文件,并且将这次删除放入暂存区(若文件在工作区或暂存区中有修改,也会执行删除操作)
git rm -f <file>
# 不删除工作区对应的文件,只将文件删除放入暂存区以供提交
git rm --cached <file>
# 将a改名为b,并且将这个改名放入暂存区
git mv <filea> <fileb>
# 添加注释并将暂存区中的所有修改提交到本地仓库
git commit -m "注释"
# 添加注释并将暂存区中的file的修改提交到本地仓库
git commit <file> -m "注释"
# 添加注释使用当前提交覆盖上一次的提交
git commit --amend -m "注释"
# 添加注释使用file的当前提交覆盖上一次的提交
git commit -m "注释" --amend <file>
# 添加注释并将工作区和暂存区中的所有修改提交到本地仓库
git commit -a -m "注释"
# 添加注释并将工作区和暂存区中的所有修改提交到本地仓库
git commit -am "注释"
# 拿`α`版本提交的信息(作者、提交者、注释、时间戳等)来提交当前修改
git commit -c α
# 丢弃暂存区中的file文件的修改
git reset -- <file>
# 丢弃暂存区中的file文件的修改
git reset <file>
# 使用本地版本库`α`提交处的file版本覆盖暂存区中的file
git reset α <file>
# 丢弃暂存区中的所有文件的修改(工作区不受影响)
git reset
# --mixed为缺省参数,丢弃暂存区中的所有文件的修改(工作区不受影响)
git reset --mixed
# 丢弃暂存区和工作区中的所有文件的修改(工作区中未追踪的文件不受影响)
git reset --hard
# 仅将当前分支的HEAD指向`β`提交(暂存区和工作区中的所有文件的修改都不丢弃)
git reset --soft β
# 仅将当前分支的HEAD指向上N次提交(暂存区和工作区中的所有文件的修改都不丢弃)
git reset --soft HEAD~[n]
# 在被污染的工作区中回滚merge或者pull
git reset --merge <commit>
# 回滚`β`提交,然后提交到本地仓库
git revert --no-edit β
# 回滚掉HEAD~N处的提交,不自动提交到本地仓库
git revert HEAD~[N]
# 回滚掉(HEAD~2, HEAD\]之间的2次提交,不自动提交到本地仓库
git revert -n HEAD~2..HEAD
```
4. 分支(查看/新建/切换/删除)
```
# 列出所有本地分支
git branch
# 列出所有远程分支cache
git branch -r
# 列出所有本地分支和远程分支cache
git branch -a
# 列出所有本地分支和远程分支cache(含简单说明)
git branch -av
# 查看所有本地分支和远程分支cache之间的追踪关系
git branch -vv
# 在当前分支的HAED指针下创建名为`A`的分支(创建完不会切到`A`分支上)
git branch A
# 将分支`A`重命名为`B`
git branch -m A B
# 切换到`A`分支上
git checkout A
# 创建并切换到`A`分支上
git checkout -b A
# 不存在则创建,并切换到`A`分支上
git checkout -B A
# 强制切换到`A`分支上,丢弃暂存区和工作区中的所有文件的修改(工作区中未追踪的文件不受影响)
git checkout -f A
# 切换到上一次分支
git checkout -
# 删除名为`A`的分支(必须先切到其他分支上才能执行删除操作)
git branch -d A
# 强制删除名为`A`的分支(必须先切到其他分支上才能执行删除操作)
git branch -D A
# 删除远程分支origin/`A` cache
git branch -dr origin/A
# 使用本地版本库中的HEAD处提交覆盖暂存区和工作区中的<file>
git checkout HEAD <file>
# 使用本地版本库中的`β`提交覆盖暂存区和工作区中的<file>
git checkout β <file>
```
5. 分之合并
```
# 将dev分支merge合并到当前分支Master(无冲突时会直接提交)
git merge dev
# 将dev分支merge合并到当前分支Master(无冲突时使用注释直接提交)
git merge -m "注释" dev
# 将dev分支merge合并到当前分支Master(不自动提交)
git merge --no-commit dev
# 将dev分支rebase合并到当前分支Master
git rebase dev
# 撤销当前merge或rebase操作
git merge/rebase --abort
# 将`A`提交合入当前分支。若不冲突,则直接使用`A`的提交信息进行commit,否则要先进行冲突处理,然后继续执行git cherry-pick --continue来完成合并的提交工作
git cherry-pick A
# 撤销当前cherry-pick操作
git cherry-pick --abort
```
6. 储藏区
```
## git stash
# 有未完成的功能需要切换分支开发时 - 跨分支
# 将所有未提交的修改存储到stash区(栈)中,形式stash@{num}
git stash
# 添加备注保存
git stash save `备注`
# 查看stash区存储了那些键值对
git stash list
# 显示stash区最近的一次保存内容改动
git stash show
# 显示stash区指定版本的内容改动
git stash show stash@{1}
# 对于stash区是删除,对于工作区就是恢复。(最近的一次保存)
git stash pop
# 取出指定版本放入工作区,并删除此版本
git stash pop stash@{1}
# 取出最近的一次保存放入工作区,没有删除操作
git stash apply
# 去除指定的版本放入工作区,没有删除操作
git stash apply stash@{1}
# 删除stash区中指定版本
git stash drop stash@{1}
# 清空stash区
git stash clear
```
7. 远程操作
```
# 克隆到本地
git clone [url]
# 从远程仓库拉取master分支状态的变化信息(工作区文件不会更新)
git fetch origin master
# 从远程仓库拉取所有分支和tag状态的变化信息(工作区文件不会更新)
git fetch
# 先执行fetch,然后将远程origin/master分支merge合并到当前分支(最后会更新origin/master, origin/HEAD指针到最新提交)
git pull origin master
# 先执行fetch,然后将远程origin/v1.0分支merge合并到本地master分支
git pull origin v1.0:master
# 先执行fetch,然后将对应的远程分支merge合并到当前分支(当前分支需要预存远程分支的追踪关系)
git pull origin
# 将当前分支更新推送给对应的远端分支
git push origin
# 将本地仓库的修改push到origin所指向的远程仓库URL的master分支上
git push -u origin master
# 将本地分支v1.0更新推送给对应的远端分支remotes/origin/v1.0
git push origin v1.0
# 将本地所有分支更新推送给各自对应的远端分支
git push origin --all
```
##### 参考链接
[可可西 - 博客园](https://www.cnblogs.com/kekec/p/9248487.html)
[https://github.com/geeeeeeeeek/git-recipes](https://github.com/geeeeeeeeek/git-recipes)
- 版本控制之Git简介
- Git工作流程
- Git工作区、暂存区、版本库
- Git 指令汇总
- Git 忽略文件规则 .gitignore
- pull request
- HTTP简介
- HTTP - Keep-Alive
- HTTP缓存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息头
- TCP/IP
- TCP首部
- IP首部
- IP 协议
- TCP/IP漫画
- 前端开发规范
- 前端开发规范整理
- 前端未来规划
- HTML思维导图
- CSS思维导图
- 布局
- position,float,display的关系和优先级
- line-height、height、font-size
- 移动端适配
- JS 对象
- JS 原型模式 - 创建对象
- JS 预编译
- 探索JS引擎
- ES