Git实战进阶教程

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。

Git的功能是对文件做版本管理,其底层原理是一个对文件存取的系统,要想掌握Git,最重要的是理解commit tree,也就是提交记录历史,平时开发中我们都是通过分支来更新commit tree,Git的基础就是要学会分支操作,推荐阅读 《图解Git分支和命令》。

在日常开发中,只掌握分支操作是不够的,还需要通过各种命令操作commit tree,本文我们选择5个典型场景,介绍一下 Git 的进阶技巧,如下所示,学会这些技巧,可以极大提高工作中Git使用的效率:

  • • 选择版本

  • • 搜索调试

  • • 重写历史

  • • 重置揭秘

  • • 高级合并

选择版本

假设当前版本库如下图所示,有时我们可能先找到当前提交的父提交和祖先提交,^和~可以满足我们的需求。

^和~都匹配当前提交的父提交,^和~匹配父提交的父提交,^和~后面跟数字的时候意义是不同的,具体可以看下面的例子,假设有如下图所示的提交树:

d1b48fcf2c1634e486447016fbbe45dd.png
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

有时候我们可能会想选择一个区间,比如 A1,A2,A3,下面通过例子说明..,...和^的区别

$ 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 test

B:设想这样一种情况,某天你突然发现某行代码写错了,你想快速找到这个 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) 456

blame 时可以指定范围

$ 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.com

D:设想这样一种情况,你想在 Git 的整个历史中进行搜索?git log 可以实现这个功能

$ git log -Syanhaijing --oneline
0a191c message aaa

E:设想这样一种情况,某一天你突然发现线上代码挂了,但你找不到原因,你想快速找到是哪一个版本引入的 bug?

git bisect 是一个非常有用的调试工具,它通过自动进行一个二分查找来找到哪一个特定的提交是导致 bug 或者问题的第一个提交

$ git bisect start # 开始
$ git bisect bad # 标记为好的
$ git bisect good # 标记为坏的
$ git bisect reset # 结束

重写历史

假设你提交完后发现忘记了一些东西,打算更改上次提交,在 git 中可以使用追加提交,假设现在仓库状态如下所示

53695af792d5f2c49b7e89c46437314d.png
image.png

修改完后可以再次提交

$ git add .
$ git commit --amend

就可以修改上次提交,需要注意的是上一次提交并没有被删除,只是没有分支引用,变成了游离状态,在未来的某个时间会被 git 自动回收

05eafda6380d8afce66dbf3ba599c3c3.png
image.png

如果你进行了几次提交后后悔了,想重写之前的好几次提交,那就只能用 rebase 了,假设目前状态如下

0fd6fc571d1580e165c1dc97f4a77b9a.pngimage.png

假设你想重写 A1 和 A2

$ git rebase -i HEAD~2

需要注意的是已经 push 到远端的提交,就不要再重写了,不然世界人民会恨你,因为你需要git push -f

4c87824d4b19ac5b068103925bf8b183.png
image.png

重置揭秘

重置有两种方法,reset 和 checkout,这两个方法非常容易混淆,两个命令都分为全局模式和文件模式

reset 全局模式可以用下图总结

3fc940f59cff4ea358e542387f4a0fc6.png
image.png

reset 的文件模式可以覆盖索引区,一个副作用就是用来取消暂存

git reset xxx – file

checkout 的全局模式可以用下图总结

b73d0a2635284ea477d6e90418683aa6.png
image.png

checkout 的文件模式会覆盖索引区和工作区,可以用来丢弃修改,属于不可逆转的操作

git checkout xxx – file

其实下图就总结两个命令的区别

43f0f86a6072fe571297c86962ba6934.png
image.png

高级合并

合并分支时,很多人非常害怕遇到冲突,其实冲突并不可怕

A:git 默认的冲突显示包括 our 和 their,如果想得到和 svn 那样包含 base+our+their 的代码,可以检出冲突

$ git checkout --conflict=diff3 hello.rb

B:如果在冲突时想想 svn 一样得到,base+our+their 三个文件的代码

$ git show :1:xxx > xxx.base
$ git show :2:xxx > xxx.our
$ git show :3:xxx > xxx.their

C:合并冲突一团乱麻,想撤销合并

$ git merge --abort

D:合并后后悔了?想撤消合并?分为两种情况

假如还没推送到远端,可以 reset 掉

$ git reset --hard HEAD~
abcfc4fd7c1813a5c0f9070894dfe99e.png
image.png

如果已经推动到远端,可以用 revert

$ git revert -m 1 HEAD
e638d2c60f86b06b4f502ac810e2d722.png
image.png

总结

欢迎大家阅读本文,如果你觉得本文对你有帮助,那就点赞加关注作者吧,如果对本文有任何疑问,欢迎在评论区交流。

我在阿里招前端,我该怎么帮你?(现在还可以加模拟面试群)
如何拿下阿里巴巴 P6 的前端 Offer
如何准备阿里P6/P7前端面试--项目经历准备篇
大厂面试官常问的亮点,该如何做出?
如何从初级到专家(P4-P7)打破成长瓶颈和有效突破
若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

如何准备20K+的大厂前端面试

1c2d862cd507c208639f88ffbdd182b9.gif

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》20余篇,在知乎、掘金收获超百万阅读。
从2014年起,每年都会写一篇年度总结,已经坚持写了8年,点击查看年度总结。
同时,最近组织了源码共读活动,帮助4000+前端人学会看源码。公众号愿景:帮助5年内前端人走向前列。

f3320a767f3189d0856337961fbf12eb.jpeg

扫码加我微信 lxchuan12、拉你进源码共读

今日话题

目前建有江西|湖南|湖北 籍 前端群,想进群的可以加我微信 lxchuan12 进群。分享、收藏、点赞、在看我的文章就是对我最大的支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是设计模式_什么是设计?

什么是设计模式Imagine, you are out waiting for a taxi. You are about to miss your appointment. You wait for minutes but Good Lord! — there’s not a single taxi that can offer you a ride.想象一下,您正在外面等出租车。 您将错过约会。 您等待几分钟&…

有哪些值得学习的大型 React 开源项目?

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

成年人的样子是什么样子_不只是看样子

成年人的样子是什么样子As a branding, packaging, and digital product designer, both at Input Logic and as a freelancer, I work with clients across a wide array of industries, and am responsible for simultaneously getting to the heart of what each client wan…

如何在工作中打造影响力,带动同事?

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

谷歌maps菜单语言设置_Google Maps:拯救未来之路— UX案例研究

谷歌maps菜单语言设置I have a lousy sense of direction, so Google Maps has always been my right-hand app. On a whim last year, I decided to skip the beach and sunburn and head to Budapest for spring break. That’s when Google Maps became my best friend.我的…

1万小时后,我从外包走进了字节跳动,现在出了一本书,文末送书!

谨以此书献给相信“努力有用”的你by 大史不说话《 前端跨界开发指南:JavaScript工具库原理解析与实战》先做个自我介绍我是大史不说话,是一名前端工程师,一个相信“努力有用”的、不太聪明的、行动力还可以的程序员。曾经因为一篇《10000小时…

视觉设计师跟平面设计_使设计具有视觉吸引力

视觉设计师跟平面设计Interaction Design is very gratifying.交互设计非常令人满意。 From fast critical thinking to extracting ideas in tangible forms within the team is sure fun and challenging.从快速的批判性思维到在团队内部以有形的形式提炼想法,无…

ExtJs4 笔记 Ext.tab.Panel 选项卡

本篇讲解选项卡控件。 一、基本选项卡 首先我们来定义一个基本的选项卡控件,其中每个Tab各有不同,Tab的正文内容可以有三种方式获取: 1.基本方式:通过定义html和items的方式。 2.读取其他html的信息:通过设置contentEl就可以获取其他html的信…

一直刷不动算法题,怀疑人生?试试五毒掌法!

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

还在用开发者工具上传小程序? 快来试试 miniprogram-ci 提效摸鱼

1. 前言大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含包含jQuery、underscore、lo…

超级玛丽马里奥版下载_将超级马里奥赋予生命

超级玛丽马里奥版下载Have you ever seen a zoetrope? If today’s sophisticated computer animation is the latest evolution of the form, then the remarkable zoetrope is a crucial ancestor; the transitional form between the drawing and the animation.等皆你见过…

如何在繁重的工作中持续成长?

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

熊kong作品资源链接_Kong雀技术:向世界展示您的设计作品

熊kong作品资源链接The door opened and I entered the bedroom of an apartment I was looking to rent. No furniture or items inside, it was almost empty except for a frame in the wall. It was a photo of a peacock. As I stared at it, I could not shake one clear…

漫谈前端工程化基建和架构设计 | 留言送书

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。本文留言抽奖送书,具体规则看文末。透过工程基建,架构有迹可循。前…

设计模式 日志系统设计_模式:我们设计系统的故事

设计模式 日志系统设计Design Patterns are some of the most over-used concepts in design today. And we all know what happens when you have some ideas all over the place. We start repeating them like parrots and applying them to everything, therefore distorti…

前端好还是后端好,看看7年前端和后端怎么说

大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

提升UI技能的5个步骤

element ui 步骤重点 (Top highlight)What to do when you know how to use the software and know the basics of designing interfaces? There are a few simple things that you can do to take your skills to the next level, and you don’t need to invest in expensiv…

空降进阿里的 P10 都是什么人

周末见了几个朋友,吃饭时聊到他们前老板郭东白(阿白),对了,我朋友在速卖通,他说阿白是 14 年来的阿里,直接就空降进了他们部门,当上首席架构师,后来又升到了 CTO&#xf…

linux下练习 c++ 关联式容器multimap特性

/* multimap特性 key可以重复 不支持下标访问 */ #include<iostream> #include<string> #include "print.h" #include<map> using namespace std; typedef pair<int,string> pairmp; typedef multimap<string,double> MS;int main() …

一致性设计,而不是一致性

一致性设计重点 (Top highlight)If we ask any design system advocate what are the main reasons to build and maintain a design system, chances are ‘Consistency’ will come up as first or second in their list, together with the ‘A single source of truth’ po…