# Git

# init


创建新仓库

git init

# clone

git clone username@host:/path/to/repository

# add

// 第一次拉去代码
git pull origin master

// 新增代码
git add .

// 提交
git commit -m "第一次提交"

// 提交到远程
git push origin master

# 配置

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

# 查看用户

git config user.name
git config user.email

# 切换分支

git branch

git checkout dev

# 创建分支

# git checkout 命令加上 -b 参数表示创建并切换
git checkout -b dev

# 删除分支

 # 删除本地分支
 git branch -d release_20200709_v2.1
 # 删除远程分支
 git push origin --delete release_20200709_v2.1

# Rebase 合并


该命令可以让和 merge 命令得到的结果基本是一致的。

通常使用 merge 操作将分支上的代码合并到 master 中,分支样子如下所示



使用 rebase 后,会将 develop 上的 commit 按顺序移到 master 的第三个 commit 后面,分支样子如下所示



Rebase 对比 merge,优势在于合并后的结果很清晰,只有一条线,劣势在于如果一旦出现冲突,解决冲突很麻烦,可能要解决多个冲突,但是 merge 出现冲突只需要解决一次。

使用 rebase 应该在需要被 rebase 的分支上操作,并且该分支是本地分支。如果 develop 分支需要 rebase 到 master 上去,那么应该如下操作

## branch develop
git rebase master
git checkout master
## 用于将 `master` 上的 HEAD 移动到最新的 commit
git merge develop

# stash


stash 用于临时报错工作目录的改动。开发中可能会遇到代码写一半需要切分支打包的问题,如果这时候你不想 commit 的话,就可以使用该命令。

git stash


使用该命令可以暂存你的工作目录,后面想恢复工作目录,只需要使用

git stash pop


这样你之前临时保存的代码又回来了

# reflog


reflog 可以看到 HEAD 的移动记录,假如之前误删了一个分支,可以通过 git reflog 看到移动 HEAD 的哈希值



从图中可以看出,HEAD 的最后一次移动行为是 merge 后,接下来分支 new 就被删除了,那么我们可以通过以下命令找回 new 分支

git checkout 37d9aca
git checkout -b new


PS:reflog 记录是时效的,只会保存一段时间内的记录。

# 撤销 commit

git reset --soft HEAD^

# 仅仅撤销提交记录,代码仍然存在
# HEAD^的意思是上一个版本,也可以写成HEAD~1
# 如果进行了2次commit,想都撤回,可以使用HEAD~2

参数

  • --mixed: 不删除工作空间改动代码,撤销 commit,并且撤销 git add .
  • --soft:不删除工作空间改动代码,撤销 commit,不撤销 git add .
  • --hard:删除工作空间改动代码,撤销 commit,撤销 git add . 注意完成这个操作后,就恢复到了上一次的 commit 状态。
  • 如果 commit注释写错了,只是想改一下注释,只需执行命令;此时会进入默认编辑器,修改注释完毕后保存
git commit --amend

# 推送不同的远程仓库

# 首先将本地仓库(已经关联过github远程仓库)再次关联远程仓库
git remote add mygit https://gitee.com/modno/answer-emigrated.git
# 关联好了就想要 push
git push mygit master
# 强制推送
git push -f mygit master

# 更新远程分支索引

git fetch

# git 凭证

git config --global credential.helper wincred

# 远程协作流程

# 开源项目

  • fork dev 分支
  • 克隆代码
git clone 你本地.git

// 查看远程分支
git remote -v

// 添加远程分支别名
git remote add devmaster https://gitee.com/modno/ems-fe.git
  • 修改本地代码第一次提交
git add .
git commit -m "feat: 提交"
git push origin master
  • 第二次修改前先更新代码
git fetch devmaster
git merge devmaster/dev

# 私有项目

  • 克隆开发的分支
git clone -b 分支名称 分支地址
  • 提交代码
  • 合并分支

# commit 提交规范


提交格式:

<type> : 提交描述

type 的含义:

  • build:修改项目的构建系统
  • chore:构建过程或辅助工具的变化
  • ci:修改项目的持续集成流程
  • feat:新增功能
  • fix:修复bug
  • docs:描述性文档修改
  • style:样式修改
  • perform:性能,体验相关的提交
  • refactor:代码重构
  • revert:回滚某个更早的提交
  • test:测试相关的开发

# 错误汇总

  • npm install 出现 Unexpected end of JSON input while parsing near的错误


我们可以先清除缓存

npm cache clean --force


再次执行 npm install,如仍然出现原错误,可执行下句代码:

npm config set registry http://registry.cnpmjs.org


npm代理重置。