高大上的Git

前言

雖說用了git 一段時間了,但是卻沒有深入了解過,今天隨著廖雪峰大大的git教程來學習一波,順便總結一下,方便以后復習。歡迎大家訪問我的博客啊

集中式版本管理和分布式版本管理

  • 集中式版本控制系統,版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。集中式版本控制系統最大的毛病就是必須聯網才能工作。
  • 分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。但是這里說的不依賴網絡,并不是完全不依賴網絡就能完成所以的事情,比如讓其他開發人員拿到你的改動,所以說這里所說的不依賴網絡只是相對的,在沒有網絡的情況下,可以提交變動到本地的版本庫,但最終還是要依賴網絡提交變動讓其他開發人員看到。

安裝

  • linux下:安裝比較簡單,像我使用的deepin(linux的一種發行版)只需要一條
    sudo apt-get install git 就可以完成。
  • Mac OS X 上:直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。
  • Windows下:從https://git-for-windows.github.io下載,或者國內鏡像

創建版本庫

  • 版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
    • 在磁盤合適的地方,新建一個目錄
    • 在win下,為了避免不必要的麻煩,創建目錄的路徑不要有中文。
    • 通過git init命令把這個目錄變成Git可以管理的倉庫:
    • 瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。
    • 如果你沒有看到.git目錄,那是因為這個目錄默認是隱藏的,用ls -ah命令就可以看見。

Git基本操作

  • Git提交數據
    • 我們可以簡單的把工作目錄理解成是一個被Git服務程序管理的目錄,Git會時刻的追蹤目錄內文件的改動,另外在安裝好了Git服務程序后,默認就會創建好了一個叫做master的分支,我們直接可以提交數據到了
    • git add <filename> 或者 git add . 添加到緩存區
    • git commit - m 'msg' 提交緩存區文件到本地倉庫
  • Git移除數據
    • 有些時候會向把已經添加到暫存區的文件移除,但仍然希望文件在工作目錄中不丟失,換句話說,就是把文件從追蹤清單中刪除
    • git rm -cache <filename> 將文件從追蹤區域的緩存區域中移除,commit就不會提交了
  • Git移動數據
    • git mv <filename> <newname> 修改文件名稱
  • Git 歷史記錄
    • git log 查看提交歷史記錄
    • git log -2 查看最近提交歷史記錄
    • git log -p -1 -p顯示每次提交的內容差異,-1表示最近一次
    • git log stat -2 -stat簡要顯示增改行數,這樣可以看到修改過的內容,對文件添加或移動的行數,并列出增減的概要信息
  • Git 版本回退
    • git log 可以查看提交歷史,以便確定要回退到哪個版本,用 commit id 來回退
    • git reset --hard HEAD^ ^表示退回上一版本,^^ 上兩版本 HEAD~100上100版本
    • git reset --hard commit_id 任意之前版本
  • Git 版本前進
    • git reflog 同上
  • Git 撤銷修改
    • git checkout -- file
    • git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:
      • 一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
      • 一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。
    • 總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
  • Git 刪除文件
    • git rm <filename>
    • 如果誤刪 git checkout -- <filename>恢復道這個文件最后commit 那個版本
  • Git 創建與合并分支
    • 我們知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
    • 一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:


      1.png
    • 每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長:
    • 當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:


      2.png
    • 你看,Git創建一個分支很快,因為除了增加一個dev指針,改改HEAD的指向,工作區的文件都沒有任何變化!不過,從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:


      3.png
    • 假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合并


      4.png
    • 合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:


      5.png
    • git checkout -b dev 創建一個新分支并切換到Dev分支
    • git branch 查看當前分支及所有分支
    • git branch <name> 創建分支
    • git checkout 切換分支
    • git merge <name>合并某分支到當前分支
    • git branch -d <name> 刪除分支
  • Git解決沖突
    • git的強大之處就在于,他可以將沖突部分用 <<<<<<<=======>>>>>>>標記出來,當手動解決沖突后,提交合并。
    • 可以使用git log --graph查看分支合并圖

常用git命令及注釋

  • add #添加文件內容到文件緩存區
  • branch #列出、創建或刪除分支
  • checkout #檢出一個分支或路徑到工作區
  • clone #克隆一個版本庫到一個新目錄
  • commit #記錄變更到版本庫
  • diff #顯示提交之間、提交和工作區之間等的差異
  • fetch #從另外一個版本庫下載對象和引用
  • grep #輸出和模式匹配的行
  • init #創建一個空的 Git 版本庫或重新初始化一個已存在的版本庫
  • log #顯示提交日志
  • merge #合并兩個或更多開發歷史
  • pull #獲取并合并另外的版本庫或一個本地分支
  • push #更新遠程引用和相關的對象
  • rebase #本地提交轉移至更新后的上游分支中
  • reset #重置當前HEAD到指定狀態
  • rm #從工作區和索引中刪除文件
  • show #顯示各種類型的對象
  • status #顯示工作區狀態
  • tag #創建、列出、刪除或校驗一個GPG簽名的 tag 對象
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,716評論 4 54
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,721評論 9 163
  • 一二
    小爾木木閱讀 104評論 0 0
  • 沒有雙休的企業,從本質上來說,是為了壓榨員工有限的時間,而放棄了企業更大的發展。
    KooWong閱讀 559評論 0 0
  • 文/漠上洋 小區門口有個修鞋老人 手跟樹皮一樣布滿深溝 背像一張拉緊的弓 褪色的迷彩嘲笑著冬天的寒冷 婦人的貴兵犬...
    漠上洋閱讀 247評論 1 3