借笑傲江湖學習Git,讓Git不在枯燥乏味,還能讓你笑傲Git

       git是用於Linux內核開發的版本控制工具。與CVS、Subversion一類的集中式版本控制工具不同,它採用了分佈式版本庫的作法,不需要服務器端軟件,就可以運作版本控制,使得源代碼的發佈和交流極其方便。git的速度很快,這對於諸如Linux內核這樣的大項目來說自然很重要。git最爲出色的是它的合併追蹤(merge tracing)能力。因此學習Git是很有必要的!

Git的優勢

  • 大部分操作本地完成,不需要聯網
  • 完整性保證
  • 儘可能添加數據而不是刪除或修改數據
  • 分支操作非常快捷流暢
  • 與Linux命令全面兼容

Git的安裝

       想要使用這麼一個工具我們必須要安裝Git工具,網上已經有很多關於Git安裝的詳細步驟,這裏推薦一篇寫的很詳細的Git安裝的詳細教程(基於Windows版本的)

Git的結構

Alt

本地庫和遠程庫

       爲了更好更形象的描述本地庫與遠程庫的關係,我借鑑了B站老師的金庸小說《笑傲江湖》談Git來方便大家理解。
       有一個經理叫嶽不羣,手下有一個程序員叫令狐沖。某一天嶽不羣創建了一個本地庫,爲了能把本地庫託管到遠程,因此嶽不羣在代碼託管中心創建了一個遠程庫,但是遠程庫是沒有內容的,因此嶽不羣通過千里傳送將本地庫的內容推送(push)到遠程庫。嶽不羣覺得的自己的領悟能力不夠,練習不了辟邪劍法。於是決定把如何煉成辟邪劍法推送給令狐沖讓令狐沖來完成。令狐沖作爲大弟子謹遵師命,令狐沖遠程庫克隆(clone)工程自己的本地庫,當然克隆的同時也順帶把自己的本地庫給初始化好了。經過一番努力令狐沖終於參悟了這本武功祕籍,在自己本地庫的基礎上進行修改,寫了詳細的注意事項以後提交到本地庫,然後再通過自己本地庫提交到遠程庫,但是嶽不羣對令狐沖設有防線(遠程庫是嶽不羣創建的),因此令狐沖不能直接提交本地庫到遠程庫,令狐沖需要通過push來加入團隊。令狐沖提交完成以後,嶽不羣通過pull拉取令狐沖的遠程修改到自己的本地,這樣就能實現團隊內的協助操作。
Alt
       某一天,嶽不羣發現辟邪劍法不香了,想研究葵花寶典。於是語重心長對令狐沖說:“衝兒啊!爲師最近喜得武功祕籍一部,鑑於你上次表現還不錯,爲師決定借你看看這本武功祕籍。過幾天爲師會來問你領悟到的精髓的”。令狐沖很開心的收下了寶典,通宵看了兩夜也沒有一點啓發。想着過幾天師傅就要檢查了,這不行得想想辦法。於是,令狐沖想到了日月神教的東方姑娘(東方不敗)讓東方不敗來幫助自己參悟。令狐沖找到東方姑娘,表明了來意,東方姑娘怎麼會拒絕呢?當然豪爽的就答應了!
       嶽不羣和令狐沖有自己的本地庫,同時嶽不羣也有自己的遠程庫。東方不敗爲了幫助令狐沖,她將嶽不羣的遠程庫複製(fork)了一份,生成了一個新的和嶽不羣的遠程庫內容相同的遠程庫,然後她將這個複製的遠程庫下載到本地(clone),經過大量的修改後,再將自己的本地庫的內容上傳(push)到自己複製的遠程庫。東方不敗想着幫兄弟就要幫到底,隨後她向嶽不羣的遠程庫發送了一個拉起(pull request)的請求,經過嶽不羣的審覈通過後。發現原來如此,毫不猶豫的將東方不敗提交的內容進行合併(merge)了。然後,令狐沖和嶽不羣就可以從嶽不羣創建的遠程倉庫拉取(pull)東方不敗提交的內容了。這樣也就實現了團隊外的協助操作了!
Alt

本地庫初始化

  • 進入一個空的文件夾目錄,鼠標右鍵打開git bash
  • 輸入命令 git init,會發現創建一個.git的隱藏文件
  • 通過ls -la查看當前文件下是否生成的隱藏文件
  • 通過命令 cd .git/進入該隱藏的文件夾

注意:.git目錄中存放的是本地庫相關的子目錄和文件,不要刪除,也不要亂改動

設置簽名

       作用:通過用戶名和Email地址來區別不同開發人員的身份。

       辨析:這裏設置的簽名和登錄遠程庫的(代碼託管中心)的賬號、密碼沒有任何關係。

       命令:
              項目級別/倉庫級別:僅僅在當前本地庫範圍有效

git config user.name '用戶名'
git config user.email '用戶郵箱'

              信息保存目錄:.git/.config

              系統用戶級別:登錄操作系統的用戶範圍

git config --global user.name '用戶名'
git config --global user.email '用戶郵箱' 

              信息保存目錄:~/.gitconfig

              級別優先級:就近原則

  •               項目級別優於系統級別,兩者都有時,採用項目級別簽名
  •               如果只有系統用戶簽名,就以系統用戶簽名爲準
  •               二者都沒有不允許

基本操作

  • 狀態查看操作
git status#查看工作區、暫存區狀態
  • 添加操作
git add 'file name'#將工作區的 新建/修改 添加到轉存區
  • 提交操作
git commit -m "commit message"#將暫存區的內容提交到本地庫
  • 查看歷史記錄操作
git log#查看歷史提交參數

git log --pretty==oneline#漂亮的顯示歷史記錄

git log --oneline#更簡潔的顯示歷史記錄信息

git reflog#會提示回到之前的版本需要移動多少步指針

多屏幕顯示方法:

空格:向下翻頁
b:向上翻頁
q:退出
  • 前進後退

        本質:移動HEAD指針

        一、索引值法:
        ① 先查看記錄對應的索引值
在這裏插入圖片描述
        ②在通過命令到相關的記錄

git reset --hard '對應的索引值'

        二、其它方法

git reset --hard HEAD^ #向後移動一步
git reset --hard HEAD^^ #向後移動兩步
git reset --hard HEAD^^^ #向後移動三步

git reset --hard HEAD~1 #向後移動1步
git reset --hard HEAD~n #向後移動n步

        使用 ^ 和~只能實現版本的後退,並且後退幾步就有幾個該符號(^)。通過以上比較發現還是索引值法比較方便

  • reset命令的三個參數對比
參數 作用
- -soft 僅僅在本地庫移動HEAD指針
- -mixed 本地庫移動指針的同時重置緩存區
- - hard 本地庫移動HEAD指針,同時重置暫存區和工作區
  • 刪除文件並找回
           前提:刪除前,文件存在時的狀態提交到本地庫
           因爲Git進行操作時只會增加版本,而不會刪除任何一個版本。因爲歷史記錄沒有刪除,所以只要本地庫沒有刪除就是可以退回到之前版本的。依舊是通過命令git reset --hard '相關版本的索引值'
  • 比較文件差異
git diff [文件名] #將工作區中的文件和暫存區進行比較

git diff [本地庫歷史版本][文件名]#將工作區的文件和本地歷史記錄進行比較

#不帶文件名,可以比較當前工作區的所有文件

分支管理

  • 分支概念
           在版本控制中,使用多條線同時推進多個任務。
           在初始化本地庫之後,本身會創建一個master分支(主幹),某一天突然想重新創建一個新的功能,但是不想在master分支上進行開發(不想對它造成污染)。我創建了一個新的feature_blue分支來進行開發,創建時是從master分支複製過來的。另外,我又想開發一個功能。因此,我又創建了另外一個分支(feature_game)。會發現每個分支都是彼此獨立的,各自向前開發,如果不合並各個分支之間是不會有任何影響的。如果在開發過程中遇到了bug,那麼就需要及時進行修復bug。這個時候就又需要創建另一個hot_fix修復分支
    在這裏插入圖片描述
  • 分支操作
操作 命令
創建分支 git branch '分支名'
查看分支 git branch -v
切換分支 git checkout '分支名'
合併分支 ①使用git checkout [被合併分支名]切換到接受修改的分支上②執行git merge [有新內容的分支名]

分支衝突:

       我在給master分支下創建提交了一個hello.py文件文件內容如下:

print('hello world')
print('hello python')
print('中國')edit by master

       我在給git_fix分支下也修改了hello.py的內容如下:

print('hello world')
print('hello python')
print('中國')edit by git_fix1

       但是當我將master分支合併到git_fix分支時會出現以下問題:
Alt
       當我再打開hello.py文件時就發現了衝突的表現
在這裏插入圖片描述
       解決衝突:
       ① 編輯文件,刪除特殊符號
       ② 把文件修改到自己滿意的程度,保存退出
       ③ git add [文件名]
       ④ git commit -m ‘日誌信息’
       注意:使用git commit -m提交合並後的文件時,一定不能帶具體的文件名
       分支管理的本質是創建和移動指針

Git基本原理

  • 哈希
    哈希是一個系列的加密算法,各個不同的哈希算法雖然加密強度不同,但是有以下幾個共同點:
    ①不管輸入數據的數據量有多大,輸入同一個哈希算法,得到的加密結果長度固定(16個字節)
    ②哈希算法確定,輸入數據確定,輸出數據能夠保證不變
    ⑧哈希算法確定,輸入數據有變化,輸出數據一定有變化,而且通常變化很大
    ④哈希算法不可逆
    Git底層採用的是SHA-1算法
    哈希算法可以被用來驗證文件。原理如下圖所示:
    Alt
  • Git版本數據管理機制
           Git把數據看作是小型文件系統的一組快照。每次提交更新時Git都會對當前的全部文件製作-個快照並保存這個快照的索引。爲了高效,如果文件沒有修改,Git不再重新存儲該文件,而是隻保留一“個鏈接指向之前存儲的文件。所以Git的工作方式可以稱之爲快照流。

本地庫和遠程庫的交互

  • 創建本地庫
    嶽不羣爲了廣大門楣,打開一個新的文件夾,給文件裏創建了一個yuebuqun.txt的文件夾,文件夾內容如下:
壯大華山,稱霸武林!

       創建完成以後添加到暫存區,然後再提交到遠程庫

  • 創建遠程庫
    Alt
    Alt
    在這裏插入圖片描述
  • 本地創建遠程庫別名
    在這裏插入圖片描述
    然後通過git remote -v命令查看
  • 推送本地庫到遠程庫
    通過命令git push new_git master推送本地庫到遠程庫,需要輸入github的賬戶和密碼,然後點擊Login,再進入遠程庫就看到了相關內容!
    在這裏插入圖片描述
  • 從遠程庫克隆項目
    ①完整的把遠程庫下載到本地
    ②創建new_git遠程地址別名
    ③初始化本地庫
    命令:git clone [遠程地址]

SSH免密登錄

① 進入當前用戶家目錄 $ cd~
② 運用命令生成.shh密鑰目錄
       $ ssh-keygen -t rsa -C ‘對應的郵箱’(注意:參數-C是大寫的
③進入.ssh目錄查看文件列表
       $ cd .ssh
       $ ls -lF
④查看id_rsa.pub文件內容
       $ cat id_rsa.pub
⑤複製id_rsa.pub文件內容,登錄GitHub,點擊頭像——Settings——SHH and GPG keys
⑥New SHH Key
⑦輸入複製的密鑰信息
⑧回到Gitbash創建遠程地址別名
       git remote add new_git_ssh ‘對應的SSH鏈接’
Alt

       不積小流無以成江河,不積跬步無以至千里。而我想要成爲萬里羊,就必須堅持學習來獲取更多知識,用知識來改變命運,用博客見證成長,用行動證明我在努力。
       如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論” “收藏”三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那我祝你開心每一天,歡迎下次再來!
Alt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章