Git基础教程(必学)

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

在工作中,发现不少同学对Git的掌握非常基础,同样作为版本控制系统,使用好Git比SVN要更有挑战,需要对Git有一定的了解,才能在工作中,驾驭好Git。

本文从最简单的基础入门,讲解工作中常用的Git基础,掌握这些是Git进阶的基础,足够日常工作场景。

安装

学习 git 前,你需要先安装 git,git 安装流程请移步这里[1],里面有各个平台的安装方法

基础

学习命令行工具要学会的第一步就是查看帮助文档,可以用下面的命令查看 git 的帮助信息

git help
git help xxx
git xxx --help
git xxx -h

接下来就是一些自定义信息了,比如配置用户名和快捷命令(别名)

git config --global user.name yanhaijing
git config --global user.email yanhaijing@yeah.netgit config --global alias.st status #git st
git config --global alias.co checkout #git co
git config --global alias.br branch #git br
git config --global alias.ci commit #git ci

值得一提的就是配置换行符了,windows 上的换行符和 mac 和类 unix 不一样,在跨平台时就痛苦了,为了统一,可以将提交到仓库的换行符同配置成 unix 格式

git config --global core.autocrlf input

如果想把 git 仓库提交到服务器,可能还要配置秘钥,如果你不想每次都输入密码的话

ssh-keygen -t rsa -C yanxuefeng@baidu.com # 生成秘钥cat ~/.ssh/id_rsa.pub # 获取公钥,配置到github 的sshkeyssh -T git@github.com # 测试是否生效

玩转 git 的第一步,你需要有一个仓库,获取仓库总共有两种办法

git init # 初始化一个仓库
git clone url # 克隆一个已有仓库

有时候我们不想把某些文件提交到仓库里,比如编译产生的临时文件,此时.gitignore 能够发挥作用,.gitignore 的规则如下

  • • # 代表注释

  • • 每行是一个 path,glob 模式匹配

  • • !代表取非

  • • *代表 0 个或多个字符

  • • ?代表一个字符

  • • []代表集合

.gitattributes 这个还没想好怎么讲,挖个坑坑坑坑

git 仓库的工作流如下

f15bec5dcec61c3dc112f0aa3e60e478.png

git 的文件状态如下

b7b75c20ea4eb13f5366bab80ec002cf.png
image.png

想查看当前的仓库状态可以使用git status,这个命令能够给出很多提示信息,建议经常使用

关于 commit 的提交,每个 commit 必须是独立,完整的功能,保持适当粒度,不要过大也不要过小;关于提交信息的描述可以参考下开源届的规范,也可以看下我之前整理的提交规范[2],下面是一个提交的例子

Header = type: subject(feat fix style refactor)
Body = listfeat: 添加分享功能给每篇博文添加分享功能Œ- 添加分享到微博
- 添加分享到微信

在 git 内部一个 commit 的信息如下

616e3bac461ab619a4f89c3c41a6ad10.png
image.png

但后面我们会进行如下的抽象

2770cc22f3c5cdf0290da0f57a43678f.png
image.png

分支

git 中的分支非常轻量,就是对 commit 的一个引用,默认 git 会新建一个 master 分支,git 中有一个特殊的引用讲座 HEAD,他只想当前所在的位置

88f899c59ece6c47723e9a9f92e3b8c7.png
image.png

有时我们需要新建或删除分支

git branch test # 新建分支test
git branch –d test # 删除test分支,当前HEAD必须不能指向test分支
73f8f4f3601b45f8789c03396239a8ce.png
image.png

建好分之后,就该切换到那个分支去了

git checkout test # 切换到test分支

新建并切换分支,可以合并成一个命令,下面的命令等同于上面两条命令

git checkout –b test
ff33c953cb90918ebe4aab562f5c9287.png
image.png

在新建的分支上开发一段时间后,你可能需要将其合并到另一个分支去,而合并分支共有 4 种不同的方法,关于这四种方法的区别和场景请看这篇文章《图解 4 种 git 合并分支方法》。

远端

一张图概括远端和本地的关系,以及相应的操作命令

d401e640299576ac8a9635d7f542a1db.png
image.png

其实 git 在远端是一个完整的仓库,和本地其实一样,也有 HEAD,也有 master;但我们本地为了防止冲突,都将远端的引用名字放到了 origin 下(origin 也可是别的名字)

Remote HEAD -> xxx/HEAD(origin/HEAD)
Remote master -> xxx/master(origin/master)

在.git 下面的 config 文件里面又对应规则的配置信息,fetch 哪一行,设置将远端refs/heads下的放到本地的refs/remotes/origin

[remote "origin"]url = git@github.com:yanhaijing/yanhaijing.github.io.gitfetch = +refs/heads/*:refs/remotes/origin/*

对于远端最常用的操作就是更新和推送

git fetch origin # 将本地的远端和远端进行同步
git merge origin/master # 将本地的远端合并到本地分支git pull origin # 这相当于上面两条命令git push origin master # 将本地推送到远程分支

关于 push 的必须得说一下引用展开,下面这些命令是一样的,git 内部都会自动展开成最后一条

git push origin master
git push origin master:master
git push origin heads/master:heads/master
git push origin refs/heads/master:refs/heads/master

有时候我们可能会查看远端的信息,比如看下远端地址啥的

git remote –v # 查看全部远端的摘要信息
git remote show xxx # 查看具体远端的详细信息

有时候我们也会增加或删除远端

git remote add xxx url # 新加一个新的远端
git remote remove xxx # 删除一个远端

日志

有时我们需要查看 git 的提交日志,可以使用git log,log 有大量参数,感兴趣的同学可以自行探索,但常用的就下面这么几个

git log -number # 显示最近几条
git log --oneline(--abbrev-commit --pretty=oneline)# 单行显示,显示简短commit id
git log --graph # 以树形展示
git log --decorate # 显示分支名等
git log --first-parent # 显示第一父元素(不显示merge进来的树形结构)
git log --all # 显示全部分支

除了git log我们还可以使用 gitk 这个工具,这是 git 2.0 以后加入的图形化工具,可以以更友好等方式查看 log 树,常用的有两个参数

gitk –all # 显示全部分支
gitk --first-parent # 显示第一父元素(不显示merge进来的树形结构)

下图是git log和 gitk 的命令复杂度和显示效果

84b7c593891f6fcbebc07507f90c00c4.pngimage.png
25f208dbb72e2f89929fee8353d2bf5a.png
image.png

注:如果你在 mac 下使用 gitk,可能会发现显示非常模糊,这是因为 retina 屏幕的问题,可以尝试下下面的方法

首先安装 retinizer,如果你没安装 brew 可能需要安装 homebrew

$ brew cask install retinizer

然后打开 gitk 所在的目录

$ open /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/

打开 retinizer,并将 Wish.app 拖拽到 retiniaer 的界面,然后点一下那个按钮,然后就 ok 了

下面是带不带--first-parent的区别

376784e72500c13dbbda71f4ab1c39f6.png
image.png

有人用 git 的 commit 只做了台北的公交线路图,我表示给跪了,感兴趣猛戳这里[3]

diff

diff 命令常用的命令有两个

git diff file #查看指定文件的差异
git diff --stat #查看简单的diff结果

下图总结了 diff 全部情况

317e0dab26941c84a0036d7a7e79b80b.png
image.png

常用命令总结

config
help status log
clone init
add commit
branch checkout diff
merge rebase
fetch pull push remote

总结

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

引用链接

[1] 这里: https://git-scm.com/downloads
[2] 提交规范: http://yanhaijing.com/git/2016/02/17/my-commit-message/
[3] 猛戳这里: http://gugod.org/2009/12/git-graphing/

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

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

8fa79438bb20713e7f6386581187f33a.gif

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

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

b1124c8a222934c33aa844425733b8ab.jpeg

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

今日话题

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

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

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

相关文章

用户体验改善案例_优化用户体验案例研究的五种方法

用户体验改善案例重点 (Top highlight)I’ve had the opportunity to give several portfolio reviews, and I want to share some common themes I see and how you can improve them to put your best foot forward as you search for that new product design gig.我有机会发…

我捡到宝了!2022版前端面试上岸手册,最新最细致!

大裁员背景下,没什么比辞职后找不到工作更扎心!在行情好转前,前端程序员只能“猥琐发育”,不轻易跳槽,同时要修炼内功:对八股文、底层源码、重点项目等进行查缺补漏,静待行情好转抓住机会&#…

flo file_Flo菜单简介:可扩展的拇指友好型移动导航

flo fileWhen it comes to using my phone, I’m a thumb guy and I like using my phone held in one hand. Well, apparently 49% of us prefer it like this.说到使用手机,我是个拇指小伙,我喜欢用一只手握住手机。 好吧,显然我们当中有49…

超炫的iphone应用UI/UX设计赏析

日期:2012-10-5 来源:GBin1.com 要想成为一款成功的iOS应用,不单单是功能设计,还需要有超棒的用户界面和用户体验的完美设计。为了带给大家更多的设计灵感,今天我们分享另外一套来自dribbble的iOS应用UI和UX设计&…

Git实战进阶教程

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

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

什么是设计模式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…