### 2021-08-13是个大日子
*****
突然发现,代码提交不了,呜呜呜...
[官方解释(英文自行查看)](https://github.blog/changelog/2021-08-12-git-password-authentication-is-shutting-down/) :反正大致意思是,密码验证于2021年8月13日不再支持,也就是不能再用密码方式去提交代码。请用使用 **personal access token** 替代。
![](https://img.kancloud.cn/b5/fb/b5fbc708b5faf5b61155825db1ac7eee_748x129.png)
* 具体如何生成token:
第一步:
![](https://img.kancloud.cn/04/41/0441bb8cd68393ea0dd5cd0cd3f2d883_237x623.png) ![](https://img.kancloud.cn/70/83/7083506ea7dc40bca10a53f007517083_317x1004.png) ![](https://img.kancloud.cn/58/3f/583f3182282e36cb69cb5bd1d7421714_1359x439.png)
![](https://img.kancloud.cn/a4/39/a43973c91b44b65466c2f7bd2e555b4f_1479x717.png)
第二步:**生成的token一定要复制,记住,记住,记住,再次进入就找不到了**
把`token`直接添加远程仓库链接中,这样就可以避免仓库每次提交代码都要输入`token`了:
```
git remote set-url origin https://token@github.com/username/ec-echart-wx.git
// token: 你所生成的token
// username: 你的用户名
// ec-echart-wx:仓库名称
```
![](https://img.kancloud.cn/24/36/243681d4eb8fb5425b274b2725489442_1111x86.png)
其实手动修改.git文件下得config,如下图,也可以:
![](https://img.kancloud.cn/36/82/3682b7bf32ba979885ae2fb2af083071_1185x443.png)
注:发现git pull等失败,试试把https修改成http
# 进入正题
*****
### 分支如下 dev-m / dev-p
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/10bacd8a67a24978aebb877ff5d4b7f5~tplv-k3u1fbpfcp-zoom-1.image)
### 本地创建分支,并推送到远程
当前分支是:dev-m
git branch dev-p // dev-p就是分支名字
git push origin dev-p //把分支推送到远程
git checkout dev-p //切换分支到dev-p
//到这里分支已经切换到:dev-p
git branch -a //查看所有分支
### 下面是(全部/单独)添加某个文件(夹)
当前分支:dev-p
git add . // “ . ” 全部更改的都提交
git add pages //pages就是文件夹 (如果是文件git add test.txt)
git commit -m "添加这次提交说明记录"
git push origin dev-p
### 方法一:合并分支(从dev-p合并到dev-m分支)
当前分支是dev-p
git checkout dev-m
git pull
git merge dev-p
git push origin dev-m
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7dd3bd77ed6442ff933b923f85aab38b~tplv-k3u1fbpfcp-zoom-1.image)
### 方法二:合并分支(从dev-m合并到dev-p分支)
当前分支:dev-p
git fetch origin dev-m //创建临时缓存分支,dev-m必须是你要合并的分支的名称
git diff dev-m //查看dev-m 分支的修改记录
git merge dev-m //把缓存分支合并到当前分支dev-p
git branch -d dev-m // 删除本地缓存分支dev-m,不影响远程的dev-m分支
git push origin dev-p //提交至远程分支
--------------------------------------------------------------------------
如果冲突,就先解决冲突文件,然后在操作:
git add .
git commit -m "解决冲突"
git push origin dev-p
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7d99b8a8303a404dac2c5a3e28514a79~tplv-k3u1fbpfcp-zoom-1.image)
### 解决冲突
手动去texts.txt修改冲突的地方
<<<<<<< HEAD
dev-m分支的内容
======= 分开来,上部分指当前(dev-m)分支的内容,下面属于dev-p的内容
dev-p分支的内容
>>>>>>> dev-p
可能有多个文件冲突,注意Auto-merging 后面的文件名
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/21114644371d4cd59c693720af889777~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d111c92b94d4bfc8d52681a19bc8e4d~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/170618c6febe4f6cb877be118215ccb2~tplv-k3u1fbpfcp-zoom-1.image)
注:
从dev-p的内容合并到dev-m中,提交成功,还差一步
切换至dev-p中,把dev-m也合并到dev-p实现两个分支内容同步
### 撤销已经修改的某个文件/文件夹
##### 1、在没有git add .的情况
git checkout . // 全部撤销修改
git checkout pages // 只撤销pages文件夹内容
git checkout text.txt //只撤销text.txt文件的内容
##### 2、已经git add .的情况
git reset HEAD // 表示从缓存区撤销回到第一步,git reset HEAD text.txt表示text.txt这个文件撤销回到第一步
git checkout . // 即可
##### 3、已经git commit -m ""
git commit --amend -m "" // commit的说明重置,或者说修改
##### 4、已经commit了,又修改,然后在上传,走git add . git commit -m "",就会出现两次提交记录,如下图
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0ec33248e4614b49ad2aa683a10ab716~tplv-k3u1fbpfcp-zoom-1.image)
##### 5、解决第4点出现两次commit问题
git add test2222.txt
git commit --amend --no-edit
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/176dc1f857c74ebea5aecc85482677a7~tplv-k3u1fbpfcp-zoom-1.image)
### 查看分支提交记录
git log //可以看到每次提交的commit
git log -p // 修改记录
注:退出--->因为状态下,按 q 退出;往下看---> enter键
### 版本回退
回退上一个版本:
**reset:历史记录没有了**
git reset --hard HEAD^
git push origin HEAD --force
如果推送远程失败,重复操作一次
![](https://img.kancloud.cn/af/8b/af8bb1f9dabd055d49b00dec2589e991_1002x927.png)
回退多个版本:
git reset --hard HEAD~3
![](https://img.kancloud.cn/45/90/4590a197120ef08e6bf0a8f35d1b1479_611x279.png)
1、reset // git reset --hard 版本号(6位或者更多)如图五显示
回退之后,回退的历史记录就没有了
2、revert // git revert
一级一级的往后revert,值得注意的是从当前版本号开始,如图二所示,版本号 028c21要回退到169bff,就是内容为3的版本,需要git revert 028c2169 git revert f8327e733两次revert,然后本地如图三所示,最后push到远程如图四所示
图一:
![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a825d0559d364ad38ce153bba25af3e8~tplv-k3u1fbpfcp-watermark.image)
图二:
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1999c4a4e4c14305a6f754e0a60aadaf~tplv-k3u1fbpfcp-watermark.image)
图三:
![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dcde48f6cb0147bab783396a0aa80362~tplv-k3u1fbpfcp-watermark.image)
图四:
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fd381fb25d0d4090a365d92497ce1a58~tplv-k3u1fbpfcp-watermark.image)
图五:
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3cd929d268084286bf85e4bd65f99e9c~tplv-k3u1fbpfcp-watermark.image)
### stash缓存
在一个分支上修改,但是同时又想切回其他分支,肯定是切换不了的,这时候怎么办呢
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/169be8fcb5664db8875c6a41c7d147bb~tplv-k3u1fbpfcp-zoom-1.image)
可以把当前分支修改放置缓存区中
git stash // (时间可能比较久,注意)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5698232849a6425894aeada41e7516d0~tplv-k3u1fbpfcp-zoom-1.image)
那么怎么把缓存区的工作内容切回来呢?
git stash list // 查看缓存区有多少缓存
git stash pop // 默认列表中第一个切回当前工作区,并删除缓存区这条记录
git stash apply // 默认列表中第一个切回当前工作区,并不删除缓存区这条记录
git stash show -p stash@{0} // 查看缓存记录修改记录
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f2d7770ada674de5b3e6a6c1adc47929~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4e9686be3e3c4e8bbba3571aee96dbc5~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e51107b431224004beeac831f6359e6b~tplv-k3u1fbpfcp-zoom-1.image)
### stash缓存实际应用
git stash
git pull
git stash pop (或者git stash apply,还是建议使用apply吧,缓存还在)
手动解决冲突文件(修改同一文件这个冲突比较好改,修改同一文件中同一个地方,就麻烦些了)
git add .
git commit -m "说明"
git push origin dev-p
补充:
git stash list 查看缓存列表
git stash show / git stash show stash@{0} 前面是简写形式,查看这个修改了那些文件
git stash / git stash save "说明这次缓存内容" 前面是简写形式,如果不添加save,默认记录commit的说明
git stash pop / git stash pop stash@{0} 前面简写形式,stash@{0}中{}中可以是1,2,3,4等等,对应缓存list中的序号(或者说id)
git stash drop stash@{0} 删除第一项缓存项
高级:
git stash -a/-u save "说明提交记录"
-a所有文件都缓存,包括git忽略文件
-u包含新增文件,而不会存git忽略文件
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc242fae188b4a8aaa604ef582dc3791~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/84068534c62842eb9d22855491547f60~tplv-k3u1fbpfcp-zoom-1.image)
### 合并指定文件夹
从dev-m合并某个文件到dev-p的过程:
当前分支是dev-m
切换分支到dev-p: git checkout dev-p
当前分支是dev-p (注意需要git pull最新的代码)
创建一个临时分支,并且切换到临时分支:git checkout -b p-tmp
从dev-m分支复制需要合并的文件夹到临时分支p-tmp: git checkout dev-m ./src/views/home
把临时分支内容提交到缓存区:git commit -m "缓存说明" ----不可少哦
重新切换到目标分支dev-p : git checkou dev-p
把临时分支合并到目标分支:git merge p-tmp
(有冲出就手动解决冲突,解决完成 git add . git commit)
提交至远程分支git push origin dev-p
最后看看还需要删除本地临时分支git branch -d p-tmp
OK ...
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/83542899c2dd47a99439f5d86d39bc9e~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3792e30b27c148b09e9a29d1d0560cf4~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0626deae13934a758c3f7de43af70efb~tplv-k3u1fbpfcp-zoom-1.image)
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/17ad69dfec37450abf506a9a50ce3eab~tplv-k3u1fbpfcp-zoom-1.image)
### 合并文件之后回退
当前分支是:dev-m ,要合并dev-p分支
git merge dev-p
出现一下情况:
1、出现冲突了,发现冲突,还没有git add . ,想要回到merge前,git merge --abort ,意思是:放弃这次合并
2、出现冲突了,发现冲突,已经git add . ,想要回到merge前,git merge --abort ,意思是:放弃这次合并
3、出现冲突了,发现冲突,已经git commit -m "" ,想要回到merge前,git revert -m 1 HEAD ,意思是:新建一个commit说明,并且回到合并之前的状态,(可能还要重提提交呢)(慎用git reset --hard commit_id 回退到指定的commit节点)
### 修改git的账号密码
https://jingyan.baidu.com/article/642c9d3435a6e9644a46f732.html
### 需要某一个commit与当前commit合并代码
git reflog // 查看commit记录
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3b3693c7fec945418783c263718ccad5~tplv-k3u1fbpfcp-zoom-1.image)
git cherry-pick commit3
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/952dfa277795492f92bd30e7337a152e~tplv-k3u1fbpfcp-zoom-1.image)
- 首页
- 2021年
- 基础知识
- 同源策略
- 跨域
- css
- less
- scss
- reset
- 超出文本显示省略号
- 默认滚动条
- 清除浮动
- line-height与vertical-align
- box-sizing
- 动画
- 布局
- JavaScript
- 设计模式
- 深浅拷贝
- 排序
- canvas
- 防抖节流
- 获取屏幕/可视区域宽高
- 正则
- 重绘重排
- rem换算
- 手写算法
- apply、call和bind原理与实现
- this的理解-普通函数、箭头函数
- node
- nodejs
- express
- koa
- egg
- 基于nodeJS的全栈项目
- 小程序
- 常见问题
- ec-canvas之横竖屏切换重绘
- 公众号后台基本配置
- 小程序发布协议更新
- 小程序引入iconfont字体
- Uni-app
- 环境搭建
- 项目搭建
- 数据库
- MySQL数据库安装
- 数据库图形化界面常用命令行
- cmd命令行操作数据库
- Redis安装
- APP
- 控制缩放meta
- GIT
- 常用命令
- vsCode
- 常用插件
- Ajax
- axios-services
- 文章
- 如何让代码更加优雅
- 虚拟滚动
- 网站收藏
- 防抖节流之定时器清除问题
- 号称破解全网会员的脚本
- 资料笔记
- 资料笔记2
- 公司面试题
- 服务器相关
- 前端自动化部署-jenkins
- nginx.conf配置
- https添加证书
- shell基本命令
- 微型ssh-deploy前端部署插件
- webpack
- 深入理解loader
- 深入理解plugin
- webpack注意事项
- vite和webpack区别
- React
- react+antd搭建
- Vue
- vue-cli
- vue.config.js
- 面板分割左右拖动
- vvmily-admin-template
- v-if与v-for那个优先级高?
- 下载excel
- 导入excel
- Echart-China-Map
- vue-xlsx(解析excel)
- 给elementUI的el-table添加骨架
- cdn引入配置
- Vue2.x之defineProperty应用
- 彻底弄懂diff算法的key作用
- 复制模板内容
- 表格操作按钮太多
- element常用组件二次封装
- Vue3.x
- Vue3快速上手(第一天)
- Vue3.x快速上手(第二天)
- Vue3.x快速上手(第三天)
- vue3+element-plus搭建项目
- vue3
- 脚手架
- vvmily-cli
- TS
- ts笔记
- common
- Date
- utils
- axios封装
- 2022年
- HTML
- CSS基础
- JavaScript 基础
- 前端框架Vue
- 计算机网络
- 浏览器相关
- 性能优化
- js手写代码
- 前端安全
- 前端算法
- 前端构建与编译
- 操作系统
- Node.js
- 一些开放问题、智力题