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.我有机会发…

video from html5

掌握HTML5中的多媒体--视频(video) 除非你一直生活在一个偏远的岛屿上,过去一年左右的时间,你应该已经听说过HTML5的各式炒作。HTML5将重塑富Web应用的未来。 下面 Figure 1的示例展示了HTML5中video标签与传统的object标签的不同. Figure 1 1. <section> 2. <h…

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

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

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.说到使用手机&#xff0c;我是个拇指小伙&#xff0c;我喜欢用一只手握住手机。 好吧&#xff0c;显然我们当中有49…

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

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

Git实战进阶教程

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含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.想象一下&#xff0c;您正在外面等出租车。 您将错过约会。 您等待几分钟&…

hive实现not in

当前HIVE 不支持 not in 中包含查询子句的语法&#xff0c;形如如下的HQ语句是不被支持的: 查询在key字段在a表中&#xff0c;但不在b表中的数据 select a.key from a where key not in(select key from b) 该语句在hive中不支持 可以通过left outer join进行查询,&#xff0…

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

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含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…

HDU 3664 Permutation Counting(DP)

题目链接 弱爆啦&#xff0c;组合弱爆了&#xff0c;反正是没想出来怎么搞这个题&#xff0c;其实这个公式不难推啊&#xff0c;反正就是没推出来。今天队内赛&#xff0c;实在是没办法了&#xff0c;暴力写了个DFS&#xff0c;先把10以内的打出表来&#xff0c;发现类似杨辉三…

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

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含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.我的…

this和prototype

this出现在构造函数中&#xff0c;更多的是表示一种特有的属性&#xff1b; prototype主要用于拓展函数的属性&#xff0c;方法。 在函数类实例化的时候&#xff0c;this的属性需要复制相应的副本&#xff0c;prototype不用。 function Blog(title,content) { this.titletitle;…

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

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

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

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

ExtJs4 笔记 Ext.tab.Panel 选项卡

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

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

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

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

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

ListView几个比较特殊的属性

Android:stackFromBottom"true" 设置该属性之后你做好的列表就会显示在列表的最下面&#xff0c;值为true和false android:transcriptMode"alwaysScroll" 要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息&#xff0c;并且希望最新的…