(一)深入淺出圖解Git,入門到精通(保姆級教程)

2022-02-07 架構師社區

Git簡介

在我們的認知範圍Git和SVN都是對於代碼託管的工具,那麼這兩者又有什麼不同呢?

Git是世界上先進的「分布式的版本控制系統」,而SVN是「集中式的版本控制系統」,SVN對於版本的管理集中於中央伺服器中,而Git對於版本的管理可以在本地。

SVN管理的模式從SVN伺服器中拉取代碼,然後開始自己的開發,開發完後再向SVN伺服器提交代碼,所以集中式的版本管理,需要聯網才能進行,一旦沒網就沒辦法向SVN伺服器提交代碼。

而Git是分布式的版本管理,每個開發者的本地都會有完整的版本庫,不需要來聯網,也能進行版本的管理和代碼的提交,每個開發者都可以在本地進行提交代碼、查看版本、切換分支等操作。

所以相對於SVN來說Git的存儲也會相對比較佔用空間,但是以空間換來了Git對版本管理的高效,不得不說是一種高明的策略。

Git安裝

Git可以安裝在Windows或者Linux,安裝在Windows相信大家都會,基本就是下載軟體,然後傻瓜式操作,再Windows安裝後,就會有Git GUI Here以及Git Bash Here。

Git Bash Here就是我們用來敲命令的窗口,打開它就可以敲關於Git的命令進行進行操作。

Windows的Git下載地址:https://git-scm.com/downloads,在這裡下載最新版的進行安裝即可。

下面我們來說一下Git再Linux的安裝過程,要在安裝Git其實也非常簡單,可以直接使用yum源進行安裝,一句命令就搞定了:

sudo yum install git

Git的配置

安裝完Git後就開始對Git進行配置操作,配置自己用戶名和Email,配置的命令如下:

$ git config --global user.name "lidu" // 用戶名
$ git config --global user.email "lidu@example.com"  // 填你自己的qq郵箱

配置完信息後,就可以「創建目錄,並且初始化自己的本地倉庫」了:

$ mkdir github
$ cd github
$ pwd
/e/github
$ git init  // 初始化本地倉庫
Initialized empty Git repository in /e/github/.git/

我這裡已經初始化過了,初始化後會默認在主幹上(master),這裡為了測試各種Git的各種命令使用本地的Git倉庫與github進行關聯。

本地倉庫與Github關聯

在你的c盤下面有一個.ssh文件夾,進入文件夾裡面可以看到有id_rsa.pub和id_rsa兩個文件,第一個文件是id_rsa.pub裡面的信息是公鑰,而第二個文件是私鑰。

加入沒有這兩個文件,可以使用以下命令進行生成:

$ ssh-keygen -t rsa -C "你註冊的郵箱"

接著就是把自己的公鑰複製粘貼配置到Github上的SSH Keys頁面中,快捷地址:https://github.com/settings/ssh ,

在Github上配置完自己的公鑰後,就可以在Github中創建倉庫進行測試,在Github的右上角中找到:create a new repo,創建一個新的倉庫:

這樣就簡單的創建自己的Github的倉庫了,創建完後就可以把自己的本地倉庫文件同步到GitHub中,使用一下命令:

git remote add origin https://github.com/liduchang/redis.git
git push -u origin master(由於新建的GitHub倉庫是空的,所以第一次推送master分支時需要加-u參數,以後再推送就不用加了)

這樣你本地的Reids目錄下的文件與Github進行了關聯,只要在Redis目錄中修改了文件,就可以使用git push origin master推向遠程的Github倉庫。

這有一點說明的就是這裡配置的是https的方式,可以配置成ssh的方式,因為http上的方式每次推向遠程倉庫的時候都會讓你輸入密碼,有點麻煩:

切換的方法,如下圖所示,只要跟著下面的命令進行操作就能隨意進行協議的切換了,還是比較簡單的,這裡就直接略過:

Git原理

上面說了那麼多就是簡簡單單的對Git進行介紹,做一個簡單的入門,下面就開始Git的原理的深入的剖析。

在Git中有四個概念:「遠程倉庫、工作區、暫存區、版本庫」。遠程倉庫就是我們Git的伺服器,用於存儲已經管理團隊的代碼。

工作區、暫存區、版本庫是我們本地的,例如當我們初始化git init後,就會在當前的目錄下出現.git目錄,「redis目錄就是我們的工作區,而.git目錄是我們的版本庫所有的版本信息都在這裡」

在.git目錄下index文件(.git/index),這就是「暫存區」,叫做stage或者index,index和我們的資料庫的index類似,所以我們有時候也叫它為「索引」

這四個區域實現的原理圖所下所示,使用過Git的對於下面的命令再熟悉不過了。從原理圖中可以看出代碼可以在不同的level之間轉移,也可以跨level之間轉移,所有的這些動作都是通過Git的命令去實現。

初始化的時候Git還會自動為我們創建第一個分支master,以及指向master的一個指針叫做HEAD。

克隆項目

在我們實際的工作環境中,都會從伺服器上進行克隆項目到本地,Git中使用git clone命令可以進行克隆項目:

git clone https://github.com/liduchang/redis

執行git clone就會生成一份副本,在本地倉庫和工作區都會同步副本,具體的原理圖如下所示:

提交代碼

從上面的圖中我們可以到,代碼可以在不同level之間移動,高level到低level,或者逆向低level到高level,也可以跨level之間移動。

Git中代碼從低level到高leve的移動主要依靠以下命令:

git commit -m "提交信息":文件添加進本地倉庫,-m參數改為-am可以直接推向本地倉庫。

運行git commit -a相當於運行git add把所有文件加入暫存區,然後再運行git commit把文件提交本地倉庫。

代碼回退

那麼從高level向低level移動代碼的命令如下:

git reset --files:用本地倉庫覆蓋暫存區中修改,也就是覆蓋最後一次git add的內容。git checkout --files:把文件從暫存區複製到工作區,用於放棄本地的修改。git checkout HEAD --files:回退最後一次的提交內容。

下面我用自己本地與github的操作測試上面的命令,加深對上面的命令的理解和使用,當我在本地新建一個github倉庫中沒有的文件:

可以看到文件的顯示Untracked files:未被追蹤的文件,「表示該文件未被git追蹤管理」

新添加的文件可以通過「git add添加到在暫存區」「這樣文件就能夠被git進行追蹤」,此時再使用git status查看文件時,就可以看到兩個文件已經是以new file的形式進行顯示:

版本回退

若是你想撤銷提交到暫存區的內容,使用git reset,可以撤銷向暫存區新添加的文件:

也可以在使用命令:git reset --hard HEAD^,表示回退上一個版本,「在Git中HEAD表示當前版本,HEAD^表示上一個版本」,若是有多個版本,這樣表示就不方便了,可以使用HEAD~10,表示版本的次數。

在Git每一個commit都會有自己的commit的ID,可以通過git log進行查看:

commit的本質就是:「每次Git都會用暫存區的文件創建一個新的提交,把當前的分支指向新的提交節點,這樣就完成了一次新的提交」

若是HEAD指針指向的是bran分支,那麼新的節點就會成為jh509的子節點,並且形成新的分支:

也就可以使用git log --pretty=oneline:直接輸出commit的ID,信息比較簡短,然後直接指定ID的回退:

$ git reset --hard  5567a

當你再次檢查你的代碼的時候就會回到了id為5567a版本,在Git的版本回退原理中,Git的內部有一個指向當前版本的HEAD指針,只要從當前版本指回去就行了,所以Git版本的回退是特別快的,只需要移動指針,實現的原理圖如下所示:

撤銷修改

丟棄工作區的修改使用:git checkout -- file命令,這條命令中的--files是不能漏的,若是只是git checkout就表示切換另一條分支的命令了。

在我的本地我直接修改:README.md文件,然後使用git status進行查看,他表示文件處於modified狀態:此時的README.md文件是還沒有被添加進暫存區的,可以直接使用以下命令,撤銷掉工作區的修改:

git checkout -- README.md

若是已經添加到暫存區了,使用以下的命令進行回撤:

git reset HEAD README.md

上面也演示了git reset命令,它既可以回退版本,又可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

當你提交了修改後,可以使用git diff查看兩次提交之間的變動,它的本質就是「任意比較兩個倉庫之間的差異」

刪除文件

在工作區直接使用rm fileName,這個操作和linux的命令一樣,若是文件已經提交版本庫,從版本庫中刪除文件可以使用git rm命令進行刪除,然後提交:

$ git rm README.md
$ git commit -m "remove README.md"

若是刪除錯了,可以使用git checkout -- README.md進行恢復,其原理就是使用版本庫的文件替換工作區的文件。

代碼衝突

在團隊中集體使用Git的時候,每個人都提交自己的代碼最後合併到主幹,總有會push失敗的時候,因為push的本質:「就是用你本地倉庫的commit記錄去覆蓋遠程倉庫的commit記錄」

但是別人提交了一些代碼,而你本地並沒有這些代碼,這樣代碼就會被覆蓋,導致別人的commit的記錄就不存在,這個是絕對不允許的。

所以,每次push的時候Git就會檢查,若是存在這種情況就是push失敗,只要先git pull一下,將本地倉庫與遠程倉庫先合併一下,最後push就可以成功了,若是文件中已經存在在衝突代碼,只要打開文件重新解決一下衝突即可。

這是圖解Git的第一篇,限於篇幅,我們下一篇繼續圖解Git操作,下一期間見。

特別推薦一個分享架構+算法的優質內容,還沒關注的小夥伴,可以長按關注一下:

長按訂閱更多精彩▼

如有收穫,點個在看,誠摯感謝

相關焦點

  • 深入淺出圖解Git,入門到精通(保姆級教程)
    (2)若是使用第二個方法,先master也需要拉取到最新版本,然後是切換到branch分支,這個也就是要切換到rebase的分支,這裡指的是branch分支。輕量級標籤只需在git tag後加上標籤的名字,就可以添加標籤。標籤管理作為開發人員可能很少使用,可以作為了解,「tag是針對Git中某一時間某一版本打上標籤」,tag的使用命令也是非常的簡單。
  • Freehand MX入門到精通視頻教程
    正在閱讀:Freehand MX入門到精通視頻教程Freehand MX入門到精通視頻教程2007-12-14 16:24出處:PConline作者:育碟軟體  《Freehand MX入門到精通視頻教程》全套教程分為基礎篇、提高篇、實戰篇三大部分,內容從最基礎的界面認識到動畫的製作和其他軟體的綜合應用,涵蓋了Freehand MX幾乎所有的知識點。經過創作者獨具匠心的設計,整套教程結構清晰,易學易用。難度由淺入深,循序漸進的向您展示了freehand的強大功能。
  • 施工員必看:360頁施工員全能圖解系統解析,從入門到精通限時領
    施工員必看:360頁施工員全能圖解系統解析,從入門到精通限時領本冊針對性地闡述了施工現場管理人員的工程管理技能和現場管理方法,共分為十一章360頁。圖解全能,清晰簡明,使用方便,具有很強的實用性與可操作性。
  • php從入門到精通教程
    首先小編要跟大家道個歉,因為小編的大意,昨天把分享給大家的xmind教程的連結搞錯啦。真的是對不起大家啦,因為一篇文章只能修改5個字符,所以小編也沒辦法把連結修改過來,如果大家需要xmind教程,請給小編留言吧,小編會發連結給大家的。今天小編給大家帶來的是一套php從入門到精通教程。
  • 30 分鐘 git 命令入門到放棄
    僅作為快速入門的教程。git 現在的火爆程度非同一般,它被廣泛地用在大型開源項目,團隊開發,以及獨立開發者,甚至學生之中。初學者非常容易被各種命令,參數嚇哭。但實際上剛上手你並不需要了解所有命令的用途。你可以從掌握一些簡單,強大的命令開始,逐步去學習。(這就是這篇文章要講的)。好了,上來!
  • 工作總結:Git的學習和使用,最詳細的Git教程,從入門到精通
    在windows系統搜索框輸入關鍵詞git,如下截圖所示,分別安裝了圖形界面化的git、以及非圖形界面化的git。至此完成git在本地windows環境下的安裝。git在做文件版本管理前,需要設置git的基本設置信息。包括GitHub帳號的註冊以及初始化配置。
  • 「電路仿真」視頻教程,proteus入門到精通+實例教程
    【電路仿真】視頻教程資料包,proteus入門到精通+實例教程+軟體下載方式見文末>proteus入門到精通>proteus入門到精通proteus實例教程
  • Git第一期:Git圖形化詳細入門教程「環境安裝」
    在這篇文章中小帥提到了可以通過Git更方便的管理遠程倉庫通常來說Github是用來存放代碼文件的如果需要大量存放其它文件還是要嚴格按照上面文章介紹的去使用對於程式設計師來說,Git在工作中是必備工具之一本系列圖形化入門教程也是小帥在學習中記錄的
  • Excel PPT Word 從入門到精通教程合輯 只要9.9
    原標題:Excel PPT Word 從入門到精通教程合輯 只要9.9 臨近歲末,年會party滿天飛!但年終總結卻讓人愁 T-T 看看自己的Word排版辣麼醜,PPT只會套模板,Excel圖表做不明白……
  • 視頻教程:Java從入門到精通
    正在閱讀:視頻教程:Java從入門到精通視頻教程:Java從入門到精通2006-06-28 15:42出處:作者:孫鑫>   《Java從入門到精通》視頻教程由孫鑫老師錄製(作者網站:http://www.sunxin.org),教程通俗易懂,內容全面,帶領Java初學者從入門到精通,快速掌握 Java 程式語言。
  • Git教程(一)
    不過,慢慢地有人把它移植到了Windows上。現在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。首先你可以在命令行輸入git,看看系統有沒有安裝Git:$ gitThe program 'git' is currently not installed.
  • 這篇文章很贊:Git 入門指南使用資料匯總及文章推薦
    前言這是一篇git學習資料匯總的文章,自己剛剛接觸git版本管理時,到處搜索尋找好的學習方案,也收集了不少資料,試圖用自己的語言整理下來,方便剛剛學習git的人,有個比較好的學習模式,今後會不斷嘗試對文章進行修改,爭取做到不會的人基本ok,會的人得到提高!一、什麼是git?
  • 「全套」繪畫學習從入門到精通系列教程
    【全套】繪畫學習從入門到精通系列教程,專業老師終生免費輔導你學畫畫,你還等什麼呢?點擊文末「了解更多」去選擇你喜歡的教程,勾搭你看上的老師!
  • Git 入門級教程
    目錄帶你快速理解 Git介紹一下 Git 的由來集中式和分布式版本控制系統區別安裝 Git一次完整的 Git 使用過程分支管理帶你快速理解 Git學完後能立刻上手的 Git 教程!工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫(包括暫存區和對象區)。當你完成某個需求或功能後需要提交到遠程倉庫,那麼第一步就是通過 git add 先提交到暫存區,被 Git 管理。
  • C語言從入門到精通_C語言教程高清完整資源
    C語言從入門到精通_C語言教程高清完整,好課低價分享(有需要的找我)如果需要C語言從入門到精通_C語言教程資料,可以複製標題或截圖此頁面給客服
  • 最火16套廣聯達教程合集,從入門到精通,迅速掌握得心應手
    最火16套廣聯達教程合集,從入門到精通,迅速掌握得心應手身為一個造價人在面對繁瑣的工作時,最先想到的應該就是廣聯達軟體吧!廣聯達軟體在造價行業應用的十分廣泛,因為廣聯達能夠大大提高工作效率,降低我們的工作時間。
  • 【教程資源】mysql/SQL資料庫入門到精通視頻教程 DBA視頻資料庫教程 在線課程
    mysql/SQL資料庫入門到精通視頻教程 DBA視頻資料庫教程 在線課程《需要的可以找我,你就可以擁有這個課程》微信:nhy336
  • 2020最新蘋果剪輯軟體,入門到精通自學教程
    PR相關的資源已經出很多了今天E哥就給小夥伴們帶來這套最新版剪輯軟體FCPX+入門到精通自學教程• 在 Pro Display XDR 上查看、編輯、分級和交付絢麗的高動態範圍視頻• 使用單根雷靂線纜連接 Pro Display XDR 以用作顯示器或參考監視器• 同時使用多達三臺連接到
  • Git 入門教程
    2013年,淘寶前端團隊開始全面採用 Git 來做項目管理,我也是那個時候開始接觸和使用,從一開始的零接觸到現在的重度依賴,真是感嘆 Git 的強大。Git 的api很多,但其實平時項目中90%的需求都只需要用到幾個基本的功能即可,所以本文將從 實用主義 和 深入探索 2個方面去談談如何在項目中使用 Git,一般來說,看完 實用主義 這一節就可以開始在項目中動手用。
  • 智能社 react經典教程-從入門到精通 網盤百度雲資源 經典課程分享
    智能社react經典教程-從入門到精通 網盤百度雲資源 經典課程分享不用懷疑!