网站那种推广链接怎么做,app网站多少钱,wordpress 随机阅读数,青岛网站建设费用大家好#xff0c;我是若川。持续组织了近一年的源码共读活动#xff0c;感兴趣的可以 加我微信 ruochuan12 参与#xff0c;每周大家一起学习200行左右的源码#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外… 大家好我是若川。持续组织了近一年的源码共读活动感兴趣的可以 加我微信 ruochuan12 参与每周大家一起学习200行左右的源码共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外目前建有江西|湖南|湖北籍前端群可加我微信进群。Git的功能是对文件做版本管理其底层原理是一个对文件存取的系统要想掌握Git最重要的是理解commit tree也就是提交记录历史平时开发中我们都是通过分支来更新commit treeGit的基础就是要学会分支操作推荐阅读 《图解Git分支和命令》。在日常开发中只掌握分支操作是不够的还需要通过各种命令操作commit tree本文我们选择5个典型场景介绍一下 Git 的进阶技巧如下所示学会这些技巧可以极大提高工作中Git使用的效率• 选择版本• 搜索调试• 重写历史• 重置揭秘• 高级合并选择版本假设当前版本库如下图所示有时我们可能先找到当前提交的父提交和祖先提交^和~可以满足我们的需求。^和~都匹配当前提交的父提交^和~匹配父提交的父提交^和~后面跟数字的时候意义是不同的具体可以看下面的例子假设有如下图所示的提交树image.png如下的命令可以看到^和~的区别$ git log HEAD^
A2
$ git log HEAD^^
A1
$ git log HEAD^2
B1
$ git log HEAD~
A2
$ git log HEAD~~
A1
$ git log HEAD~2
A1有时候我们可能会想选择一个区间比如 A1A2A3下面通过例子说明.....和^的区别$ git log master..test
C0 C1
$ git log ^master test
C0 C1
$ git log master…test
A1 A2 A3 C0 C1搜索调试A设想这样一种情况某个分支 test开发完后被删除了怎么找回这个分支呢其实 git 会在本地记录每次 HEAD 的变化通过 reflog 命令可以拿到这些记录$ git reflog
0e94c5b HEAD{0}: commit: 222
7e07aa7 HEAD{1}: commit: 111
c5aba97 HEAD{2}: commit: 000比如 111 是 test 分支最后一个提交我们可以去 111 这个提交然后再新建一个分支就 ok 了$ git checkout 7e07aa7 # 或者git checkout HEAD{1}
$ git checkout -b testB:设想这样一种情况某天你突然发现某行代码写错了你想快速找到这个 bug 的始作俑者blame 可以快速显示文件的每一行最后一次修改是谁$ git blame README.md
f6ffa8f4 (yanhaijing 2016-08-03 19:54:42 0800 1) 123
f6ffa8f4 (yanhaijing 2016-08-03 19:54:42 0800 1) 456blame 时可以指定范围$ git blame -L10,15 README.md # 查看10-15行的信息C:设想这样一种情况你想在 Git 的某个历史提交中进行搜索grep 只能搜索工作目录git grep 可以在指定提交中进行搜索$ git grep yanhaijing HEAD~27 fis-conf.js
HEAD~27:fis-conf.js: * author yanhaijing.comD:设想这样一种情况你想在 Git 的整个历史中进行搜索git log 可以实现这个功能$ git log -Syanhaijing --oneline
0a191c message aaaE:设想这样一种情况某一天你突然发现线上代码挂了但你找不到原因你想快速找到是哪一个版本引入的 buggit bisect 是一个非常有用的调试工具它通过自动进行一个二分查找来找到哪一个特定的提交是导致 bug 或者问题的第一个提交$ git bisect start # 开始
$ git bisect bad # 标记为好的
$ git bisect good # 标记为坏的
$ git bisect reset # 结束重写历史假设你提交完后发现忘记了一些东西打算更改上次提交在 git 中可以使用追加提交假设现在仓库状态如下所示image.png修改完后可以再次提交$ git add .
$ git commit --amend就可以修改上次提交需要注意的是上一次提交并没有被删除只是没有分支引用变成了游离状态在未来的某个时间会被 git 自动回收image.png如果你进行了几次提交后后悔了想重写之前的好几次提交那就只能用 rebase 了假设目前状态如下image.png假设你想重写 A1 和 A2$ git rebase -i HEAD~2需要注意的是已经 push 到远端的提交就不要再重写了不然世界人民会恨你因为你需要git push -fimage.png重置揭秘重置有两种方法reset 和 checkout这两个方法非常容易混淆两个命令都分为全局模式和文件模式reset 全局模式可以用下图总结image.pngreset 的文件模式可以覆盖索引区一个副作用就是用来取消暂存git reset xxx – filecheckout 的全局模式可以用下图总结image.pngcheckout 的文件模式会覆盖索引区和工作区可以用来丢弃修改属于不可逆转的操作git checkout xxx – file其实下图就总结两个命令的区别image.png高级合并合并分支时很多人非常害怕遇到冲突其实冲突并不可怕A:git 默认的冲突显示包括 our 和 their如果想得到和 svn 那样包含 baseourtheir 的代码可以检出冲突$ git checkout --conflictdiff3 hello.rbB:如果在冲突时想想 svn 一样得到baseourtheir 三个文件的代码$ git show :1:xxx xxx.base
$ git show :2:xxx xxx.our
$ git show :3:xxx xxx.theirC:合并冲突一团乱麻想撤销合并$ git merge --abortD:合并后后悔了想撤消合并分为两种情况假如还没推送到远端可以 reset 掉$ git reset --hard HEAD~image.png如果已经推动到远端可以用 revert$ git revert -m 1 HEADimage.png总结欢迎大家阅读本文如果你觉得本文对你有帮助那就点赞加关注作者吧如果对本文有任何疑问欢迎在评论区交流。我在阿里招前端我该怎么帮你现在还可以加模拟面试群如何拿下阿里巴巴 P6 的前端 Offer如何准备阿里P6/P7前端面试--项目经历准备篇大厂面试官常问的亮点该如何做出如何从初级到专家(P4-P7)打破成长瓶颈和有效突破若川知乎问答2年前端经验做的项目没什么技术含量怎么办如何准备20K的大厂前端面试················· 若川简介 ·················你好我是若川毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇在知乎、掘金收获超百万阅读。从2014年起每年都会写一篇年度总结已经坚持写了8年点击查看年度总结。同时最近组织了源码共读活动帮助4000前端人学会看源码。公众号愿景帮助5年内前端人走向前列。扫码加我微信 lxchuan12、拉你进源码共读群今日话题目前建有江西|湖南|湖北 籍 前端群想进群的可以加我微信 lxchuan12 进群。分享、收藏、点赞、在看我的文章就是对我最大的支持~