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.pswp.cn/news/274577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274577.shtml
英文地址,請注明出處:http://en.pswp.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;并且希望最新的…