1. 程式人生 > >Git使用筆記01

Git使用筆記01

pos 由於 克隆 fad posit 我們 server 變化 ava

本文基本的參考文章鏈接例如以下所看到的:

  • Pro Git(中文版)
  • Git教程
  • Git使用教程

簡單介紹與說明

Git是一個分布式版本號管理系統,是為了更好地管理Linux內核開發而創立的。Git能夠在不論什麽時間點,把文檔的狀態作為更新記錄保存起來。

因此能夠把編輯過的文檔復原到曾經的狀態,也能夠顯示編輯前後的內容差異。

Git與SVN的差別

SVN是集中式版本號控制系統。版本號庫是集中放在中央server的。而工作的時候,用的都是自己的電腦,所以首先要從中央server那裏得到最新的版本號。工作完畢後,須要把自己做完的活推送到中央server。集中式版本號控制系統是必須聯網才幹工作。假設在局域網還能夠。帶寬夠大,速度夠快;假設在互聯網。網速慢的話就比較惱火。

Git是分布式版本號控制系統。那麽它就沒有中央server的,每一個人的電腦就是一個完整的版本號庫。這種話工作的時候就不須要聯網,由於版本號都是在自己的電腦上。

既然每一個人的電腦都有一個完整的版本號庫,那多個人怎樣協作呢?比方說自己在電腦上改了文件A,其它人也在電腦上改了文件A,這時你們兩之間僅僅需把各自的改動推送給對方,就能夠互相看到對方的改動。

Win7環境下安裝與配置

聯網到Git官網下載頁面下載Git安裝包,然後雙擊安裝。

【開始】菜單->【全部程序】->【Git】->【Git Bash】,會彈出例如以下操作界面:
技術分享

Git的設置信息被存放在用戶本地文件夾的.gitconfig文檔裏。

盡管能夠直接編輯配置文件。但在這裏我們使用config命令。

  • Git是分布式版本號控制系統,所以須要填寫username和郵箱作為一個標識。

    git config --global user.name "<username>"
    git config --global user.email "<電子郵件>"
    

    --global 參數表示這臺機器上全部的Git倉庫都會使用這個配置,當然也能夠對某個倉庫指定的不同的username和郵箱。

  • 能夠為Git命令設定別名(如把「checkout」縮略為「co」,然後就使用「co」來執行命令)

    git config --global alias.co checkout
    
  • 假設在Windows使用命令行(Git Bash), 含非ASCII字符的文件名稱不能正常顯示。

    git config --global core.quotepath off
    
  • 讓Git以彩色顯示。

    git config --global color.ui auto
    

本地倉庫操作

創建版本號庫

版本號庫(又名倉庫,英文名repository)。能夠簡單的理解為一個文件夾,這個文件夾裏面的全部文件都能夠被Git管理起來,每一個文件的改動、刪除等,Git都能跟蹤,以便不論什麽時刻都能夠追蹤歷史,或者在將來某個時刻還能夠將文件還原。

  • 在某路徑下新建版本號庫所需的文件夾,然後通過cd 命令轉到該新建文件夾(演示樣例文件夾為E:\git_test)
  • 執行Git初始化命令,能夠把這個文件夾變成Git能夠管理的倉庫。

    git init
    
  • 此時git_test文件夾下會多出.git的文件夾。這個文件夾是Git用來跟蹤管理版本號的,沒事千萬不要手動亂改這個文件夾裏面的文件

    ls -a
    

加入文件到版本號庫

  • 在版本號庫git_test文件夾下新建一個名為「readme.txt」的文件。寫入“111111”作為文件內容。
  • 使用命令 git add <文件名稱> 將文件加入到暫存區(索引區)。

    技術分享

    使用空格切割能夠指定多個文件。使用點號 . 能夠指定全部文件。

  • 使用命令 git commit -m <文件名稱> 告訴Git,把全部改動提交到本地的版本號庫。

    技術分享

  • 通過命令 git status 來查看是否還有文件未提交。

    技術分享

  • 改動「readme.txt」文件的內容(如加入一行“222222”內容)。

  • 再次通過命令 git status 來查看是否還有文件未提交。

    技術分享

  • 使用命令 git diff <文件名稱> 查看「readme.txt」文件究竟改了什麽內容。

    技術分享

    能夠看出「readme.txt」文件的內容加入了一行“222222”的內容。

  • 知道對「readme.txt」文件做了什麽樣的改動後。就能夠放心的提交到倉庫。提交改動和提交文件是同樣的操作。

    技術分享

  • 使用 git log 命令,能夠查看倉庫的操作記錄。

    技術分享

版本號回退

  • 再次改動「readme.txt」文件的內容(如加入一行“333333”內容)。
  • 提交這次的改動。

    技術分享

  • 使用命令 git log 或者 git log --pretty=oneline 查看倉庫的操作記錄。

    技術分享

  • 假設想要回退到前兩個版本號。使用 git reset --hard HEAD~2 命令。

  • 再次查看日誌記錄。此時已經沒有後兩次操作的記錄。

    技術分享

  • 假設又想回退到最新的版本號。使用命令 git reflog 查看全部的操作記錄。

    技術分享

  • 使用命令 git reset --hard <版本號號> 回退到倉庫的指定版本號。

    技術分享

撤銷改動

  • 再次改動「readme.txt」文件的內容(如加入一行“444444”內容)。
  • 在未提交之前,假設發現加入444444內容有誤,所以得立即恢復曾經的版本號,如今能夠有例如以下幾種方法:

    • 假設知道須要刪掉哪些內容的話,直接手動更改去掉那些內容,然後add加入到暫存區,最後commit提交。
    • 能夠按前述的方法直接恢復到某個版本號。
  • 假設不想使用上面的兩種方法,而想直接想使用撤銷命令該怎樣操作呢?首先查看狀態。

    技術分享
    能夠發現。Git會告訴你 git checkout --<文件名稱> 能夠撤銷工作區的改動。

  • 命令 git checkout --<文件名稱> 的意思就是把文件在工作區做的改動全部撤銷( -- 非常重要,假設沒有的話。那麽該命令就是創建分支)。這有2種情況:

    • 文件被改動後,還沒有放到暫存區(即沒有使用 git add 命令)。使用撤銷改動就回到和版本號庫一模一樣的狀態。

    • 文件已經放入暫存區,接著又作了改動,撤銷改動就僅僅是回到加入到暫存區後的狀態。

刪除文件

  • 新建名為「new_one.txt」的文件。然後提交。
  • 手動刪除名為「new_one.txt」的文件,然後查看查看的狀態。

    技術分享

  • 使用命令 git rm <文件名稱> 將文件從暫存區刪除。

    技術分享

  • 使用命令 git commit -m * 提交操作。

    技術分享

遠程倉庫操作

獲取遠程倉庫

假設想對某個開源項目出份力,能夠先把該項目的Git倉庫復制出來,這就須要用到 git clone 命令。

  • 轉到某個用於存放項目的文件夾(如E:\)。
  • 使用命令 git clone <url> [自己定義項目名稱] 克隆遠程倉庫。

    技術分享

  • 轉到克隆所得的倉庫文件夾。使用命令 git remote -v 查看當前配置有哪些遠程倉庫。

從遠程倉庫拉取數據

  • 使用命令 git fetch <remote-name> 從遠程倉庫拉取數據到本地。

    此命令會到遠程倉庫中拉取全部本地倉庫中還沒有的數據。

    執行完畢後。就能夠在本地訪問該遠程倉庫中的全部分支。

    假設是克隆了一個倉庫,此命令會自己主動將遠程倉庫歸於 origin 名下,所以 git fetch origin 會抓取從你上次克隆以來(或是上次fetch以來)別人上傳到此遠程倉庫中的全部更新。須要記住,fetch命令僅僅是將遠端的數據拉到本地倉庫,並不自己主動合並到當前工作分支,僅僅有當你確實準備好,才幹手工合並。

  • 使用命令 git pull 從遠程倉庫拉取數據到本地。

    假設設置了某個分支用於跟蹤某個遠端倉庫的分支,能夠使用 git pull 命令自己主動拉取數據下來,然後將遠端分支自己主動合並到本地倉庫中的當前分支。日常工作中常常這麽用,既快且好。

    實際上。默認情況下 git clone 命令本質上就是自己主動創建本地的master分支用於跟蹤遠程倉庫中的master分支(假設遠程倉庫確實有master分支),所以一般我們執行 git pull。目的都是要從原始克隆的遠端倉庫中拉取數據後。合並到工作文件夾中的當前分支。

推送數據到遠程倉庫

項目進行到某個階段,要同別人分享眼下的成果,能夠將本地倉庫中的數據推送到遠程倉庫。

使用 git push <remote-name> <branch-name> 能夠實現推送功能,假設要把本地的master分支推送到origin遠程倉庫(克隆操作會自己主動使用默認的master和origin名字)。

git push origin master

僅僅有擁有所克隆的server上的寫權限,或者同一時刻沒有其它人在推數據,這條命令才會如期完畢任務。假設在你推數據前,已經有其它人推送了若幹更新,那你的推送操作就會被駁回。

你必須先把他們的更新拉取到本地,合並到自己的項目中。然後才幹夠再次推送。

查看遠程倉庫信息

使用命令 git remote show <remote-name> 查看某個遠程倉庫的具體信息(比方要看所克隆的origin倉庫),會給出很多默認信息。

技術分享

遠程倉庫的刪除和重命名

使用 git remote rename * 命令改動某個遠程倉庫在本地的簡稱。

技術分享

對遠程倉庫的重命名,也會使相應的分支名稱發生變化(比如原來的origin/master分支如今變成myori/master分支)。

碰到遠端倉庫server遷移,或者原來的克隆鏡像不再使用,又或者某個參與者不再貢獻代碼,那麽須要移除相應的遠端倉庫。

使用 git remote rm <remote-name> 命令移除相應的遠端倉庫。

技術分享

Git使用筆記01