ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 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)