Git和github使用方法總結

shuaishuai3409發表於2016-04-29

Git是一個版本控制系統,用於跟蹤檔案隨時間變化狀態的一款軟體。更具體的說,git是一個分散式的版本控制系統,在git中參與專案的每程式設計師不僅能擁有檔案的當前狀態,還能擁有專案的完整歷史記錄。


git有很多優點,獨自一個人工作時:

  • 如果編譯過程中出錯,你可以及時回到前一個時間點,以恢復較早的一個版本。
  • 如果你想要了解一天前,一週前、甚至一個月一年前的專案狀態,你可以檢查專案的先前版本以詳細產看當時檔案的狀態。
  • 通過我們很難記住當時為什麼要做出修改,使用git的提交提交資訊功能,就很容易對你所做改動的原因進行文件記錄,以便將來參考。
  • 因為使用git很容易恢復前一個版本的專案,你可以很有信心做出任何你想要的修改,如果專案修改後不能正常工作,你還可以隨時回到較早前的一個版本。
  • 你可以通過建立歷史記錄的不同分支,來嘗試對內容做出不同的更改,或獨立構建不同的功能分支。然後你可以將這些不同分支合併到主專案歷史記錄中(master branch)。

與一個團隊合作時:

  • 解決衝突:使用git,許多人可以在同一時間對同一個檔案進行更改,通常git能夠自動合併這些更改。如果不能自動合併,他將向你展示有何衝突,並且將你更易理解這些衝突。
  • 歷史記錄的獨立分支流:在一個專案中不同的人可以在不同的分支工作,這使他們能獨立工作在不同的功能上,然後再各自完成後合併這些功能。

git使用方法

安裝以及配置使用者名稱和郵箱
建立版本庫
將檔案提交版本庫中
版本回退
git和github遠端連線
新增遠端倉庫
克隆遠端倉庫


  • 安裝以及配置使用者名稱和郵箱
    windows和linux下安裝都很簡單,注意安裝成功後要配置使用者名稱和郵箱,也就是說本地所有倉庫都是用該使用者和郵箱來唯一標識和使用。基本上github用哪個郵箱和使用者名稱,本地git配置就用哪個郵箱和使用者名稱。命令如下。
    這裡寫圖片描述

  • 建立版本庫
    版本庫就是repository,可以理解為一個存放程式碼的目錄,這個目錄裡的所有檔案都可以被Git來管理,每個檔案的刪除修改,Git都能記錄下來。建立方法很簡單,就是選定一個目錄,我選定的是/c/shuai/hello這個目錄,然後執行git init命令,就可以把這個目錄變為可以管理的倉庫。此時hello目錄下會有一個.git目錄,這裡面存放的就是檔案各版本記錄。
    這裡寫圖片描述

  • 將檔案新增到版本庫中
    首先要明確,版本控制系統只能跟蹤文字檔案(txt,網頁,程式碼等)的改動,對於視訊、音樂、圖片是沒辦法跟蹤檔案變化的。在倉庫目錄hello下,新建read.txt檔案,裡面內容初始為one。使用git add filename命令把檔案存新增到緩衝區內,執行後沒有任何提示就說明新增成功了。然後執行git commit命令,把檔案提交到倉庫。還可以為該次提交寫註釋,標明自己都做了哪些修改,命令為git commit -m 註釋。也可以在提交的時候在vim裡寫註釋,我的註釋是this is the first message.
    這裡寫圖片描述
    小總結:將檔案新增到版本庫中主要是兩個命令組合使用:git add和git commit,git add負責將檔案新增進緩衝區,git commit負責將檔案從緩衝區提交至版本庫。緩衝區是.git目錄中(版本庫)比較重要的組成部分,用來暫存檔案修改。

    將檔案新增到版本庫中常用命令。

  • git status 命令:
    用來檢視是否還有檔案未提交
    通過上文可以知道,檔案提交(新增到版本庫)需要兩步,新增進緩衝區和提交至版本庫。那麼我們來分別看看當檔案處於不同狀態時,git status命令的不同。
    對檔案read.txt做修改,在原來基礎上新增一行two。先不要執行git add命令新增進緩衝區,執行git status:
    這裡寫圖片描述
    然後執行git add命令,檔案放進緩衝區後,還未提交時,用git status命令檢視檔案提交情況。
    這裡寫圖片描述
    可以明顯看出,兩者情況有何不同。 紅字表示已經修改,但未進緩衝區,綠色表示已經修改,也已經放進緩衝區,但還未提交至版本庫。平時大家使用git時,在確定無誤後,可以新增完後可以直接提交。
    當把檔案從緩衝區提交到版本庫後,使用git status檢視。
    這裡寫圖片描述

  • git diff filename命令
    該命令只在檔案修改後,但還未add或commit之前有效,用來記錄檔案做了哪些修改。一旦add或commit後,該命令就沒反應了。我們對read.txt檔案執行如下刪除one-新增one-新增two操作後,先不要add,用git diff命令檢視做了哪些修改。當確定無誤後,在add和commit。
    這裡寫圖片描述

  • git log命令
    這個命令和git diff恰好相反,是隻對提交後的檔案有記錄。不管之前你修改過多少次,只要沒提交(commit)過,即使add過,git log也不會記錄的。
    這裡寫圖片描述


  • 版本回退
    目前我們已經會了修改檔案,當實際工作中,我們發現當前版本出現錯誤,想回退到上一個版本。此時可以用git reset命令。HEAD^就是指回退到上一個版本的指標。如果回退到上上個版本,命令是HEAD^^,如果回退到10各版本之前,命令是HEAD~100。
    這裡寫圖片描述
    這裡寫圖片描述
    這裡我們回退到上一個版本,用cat命令檢視檔案內容,發現two沒有了,git log也只是記錄了上個版本的資訊。當我們發現後悔了,其實不應該回退的,腦殘想再回到當前版本,命令如下:git reset --hard 版本號。通過git reflog命令檢視所有提交檔案的版本號。我們發現two版本註釋為second,其對應版本號為9365bcc,然後執行git reset –hard 9365bcc就可以回到剛才的版本了。用cat命令檢視內容,發現有two了。
    這裡寫圖片描述

  • git和github建立遠端連線
    這塊是和github結合使用,將本地git倉庫和github倉庫之間進行檔案傳輸。首先應該註冊github賬號,應該和本地的使用者名稱和郵箱一致。然後由於git和github間的傳輸是通過SSH加密的,故需要產生金鑰,一個放在本地git倉庫(私鑰),一個放在github倉庫(公鑰)。
    這裡寫圖片描述
    首先在本地git倉庫目錄下,執行ssh-keygen -t rsa -C “郵箱@163.com”命令,會產生公鑰和私鑰金鑰對,然後選擇儲存金鑰對的目錄,系統會預設給個目錄,我選擇了放在C/shuai/hello/.ssh下,注意的一點就是必須要有.ssh這個檔案,這裡是放私鑰的,然後在該目錄下會同時產生一個公鑰。然後要輸入git和github進行檔案傳輸的密碼,可設可不設。成功後,會給出私鑰.ssh和公鑰.ssh.pub的目錄位置,私鑰是自己留著的,放在本地git倉庫中,公鑰是可以公開的,給github。兩者進行通訊時,git用私鑰給檔案加密,github收到後,用公鑰解密;反之,github用公鑰給檔案加密,git收到後用私鑰解密。

    然後開啟github,按照圖示,先開啟本地公鑰檔案.ssh.pub(可用notepad++開啟),copy到github的Key中,點選add SSH key,就表示github以成功擁有了公鑰,和git可以遠端通訊了。
    這裡寫圖片描述


  • 新增遠端倉庫
    目前情景是,已經在本地建立了一個git倉庫,又想在github上建立一個同樣git倉庫,並且希望這兩個倉庫進行遠端同步,這樣github的倉庫可以作為備份,又可以其他人通過該倉庫來協作。首先在github上建立hello.git的倉庫,然後在本地git倉庫目錄下,執行:git remote add origin https://github.xom/Miaoshuai0677/hello.git,然後輸入git push -u origin master命令,如果你設過本地git和github通訊的密碼,此時會要求你輸入使用者名稱和密碼:這裡寫圖片描述這裡寫圖片描述

    push成功後,github上會有新的檔案。
    這裡寫圖片描述


  • 從github上克隆到本地
    首先在本地新建一個目錄,作為儲存克隆專案的倉庫,然後執行git clone 地址的命令。成功後,會發現本地倉庫中有了新的專案名字。
    這裡寫圖片描述

相關文章