Git基礎教程

目錄

一、Git簡介

  • Git是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。Git是Linus Torvalds 爲了幫助管理Linux內核開發而開發的一個開放源碼的版本控制軟件。
  • Git的主要功能有:
    1. 文件備份
    2. 版本管理
    3. 多端共享
    4. 團隊合做
  • Git和SVN的區別
    1. Git是分佈式的,SVN是集中式
        這是Git和SVN最核心的區別。好處是跟同項目的其餘開發人員不會有太多的衝突,本身寫的代碼放在本地,一段時間後再提交、合併,也能夠不用聯網在本地提交;
    2. Git把內容按元數據方式存儲而SVN是按文件存儲
        全部的資源控 制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏。若是你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。由於.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上全部的東西,例如標籤,分支,版本記錄等。
    3. GIT的內容完整性要優於SVN
        GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時下降對版本庫的破壞。
    4. 網絡依賴性
        Git下載下來後,在本地沒必要聯網就能夠看到全部的log,很方便學習,SVN卻須要聯網;
    5. 提交流程
        SVN在Commit前,咱們都建議是先Update一下,跟本地的代碼比對沒問題,並確保開發的功能正常後再提交,若是忘記Updata就Commit,會常常發生錯誤,耽誤開發時間,Git由於多了添加到暫存區的步驟,這種出錯狀況會少些。   

二、各系統Git安裝

2.1 linux系統安裝Git

  • 若是是Debian或Ubuntu可使用下列命令完成Git的安裝。
$ sudo apt-get install git
複製代碼
  • 其餘Linux版本,能夠直接經過源碼安裝。先從Git官網git-scm.com/downloads下載源碼,而後解壓,依次輸入下列命令完成Git安裝。
$ ./config
    $ make
    $ sudo make install
複製代碼

2.2 Mac OS系統安裝Git

    1. 經過homebrew brew.sh/ 安裝
    1. 經過AppStore安裝Xcode,Xcode集成了Git,不過默認是沒有安裝的,選擇菜單「Xcode」>「Preferences」,在彈出窗口中找到「Downloads」,選擇「Command Line Tools」,點「Install」就能夠完成安裝了。

2.3 Windows系統安裝Git

  • 能夠從Git官網直接下載安裝程序,按照默認安裝便可。安裝完成後運行Git Bash,彈出下圖窗口表示安裝成功。
    windows Git

三、Linux經常使用命令

  • Git Bash使用的是Linux命令,下面列出了Linux的一些經常使用命令供你們參考。
rm -rf 文件夾名     //刪除文件夾(慎用!若是不指定文件夾將會刪除當前目錄下全部文件夾,並且被刪除的文件不能恢復!!!)
    rm 文件名           //刪除文件
    mkdir 文件夾名      //建立文件夾
    cd 目錄名           //改變目錄
    cd ../              //返回上級目錄
    ls -al              //顯示當前目錄全部文件(包括隱藏文件)
    touch 文件名        //建立文件
    cat 文件名          //查看文件
    mv 文件名 目標路徑  //移動文件
    echo 內容 > 文件名  //輸入內容
    echo 內容 >> 文件名 //追加內容
    vi 文件名           //用vi編輯文件
        i               //插入模式
        esc鍵           //退出編輯模式
        :q!             //強制退出
        :wq             //保存後退出
複製代碼

四、Git分區

  • Git分爲工做區、暫存區和版本區
    • 工做區:代碼(文件)編輯的地方
    • 暫存區:暫時緩存文件的地方,Git對比SVN來講,SVN中是沒有暫存區這個概念,代碼直接從工做區提交到版本區,可是這樣有很差的地方。在git中,暫存區的做用是:
      • 1.爲了不工做過程當中出現的一些誤操做,保護工做區和版本區(版本回退和撤銷)
      • 2.能夠進行分支處理
    • 版本區:本地最終代碼存放的地方,從版本區中將文件提交到遠程github倉庫中
  • 查看文件狀態
    $ git status
    複製代碼
    • 工做區文件爲紅色
    • 提交到暫存區的文件爲綠色
    • 提交到版本區查看文件狀態會顯示nothing to commit, working tree clean

五、Git初始化

  • 安裝完成後須要設置用戶名和郵箱
$ git config --global user.name "YourName"              //設置用戶名
    $ git config --global user.email "email@example.com"    //設置郵箱
複製代碼

  若是用了 --global 選項,那麼更改的配置文件就是位於你用戶主目錄下的那個,之後你全部的項目都會默認使用這裏配置的用戶信息。
  若是要在某個特定的項目中使用其餘名字或者電子郵箱,只要去掉 --global 選項從新配置便可,新的設定保存在當前項目的 .git/config 文件裏。html

  • 初始化Git(建立工做區)
$ cd d:git          //切換到須要初始化的目錄
    $ git init          //初始化
複製代碼
  • 當前目錄後面出現(master)就是已經被git管理了,master是默認分支,文件夾裏會新建名爲.git的隱藏文件夾
    master
    .git
  • 若是要取消當前文件夾被Git管理,刪除當前目錄下的.git文件夾便可,刪除命令(慎用!若是不指定文件夾將會刪除當前目錄下全部文件夾,並且被刪除的文件不能恢復!!!):
$ rm -rf .git
複製代碼
  • 不要在文件夾裏初始化,而後再進子文件夾初始化,由於項目不能嵌套項目。

六、提交文件

-am

$ git add 文件名                  //將工做區文件提交到暫存區
    $ git add .                       //將工做區所有文件提交到暫存區
    $ git rm --cached 文件名          //刪除暫存區文件
    $ git rm --cached . -r            //遞歸刪除暫存區
    $ git commit -m "版本描述"        //提交到版本區
    $ git commit -am "版本描述"       //從工做區直接提交到暫存區和版本區,文件須要提交到暫存區一次
    $ git log                         //查看日誌
複製代碼

七、文件比較與版本切換

7.1 文件比較

diff

$ git diff                        //比較工做區和暫存區
    $ git diff head                   //比較工做區和版本區
    $ git diff --cached               //比較暫存區和版本區
複製代碼

7.2 版本切換

checkout

$ git checkout .                  //從暫存區將工做區所有覆蓋
    $ git checkout 文件名             //從暫存區將工做區指定文件覆蓋
    $ git reset HEAD                  //從版本區拉取上一版本到暫存區
    $ git reset --hard 版本號         //版本區變動到指定版本
    $ git reset HEAD^                 //版本區返回到上一版本,有幾個^就表明返回上幾個版本
    $ git reflog                      //查看全部版本區版本
    $ git log --oneline               //查看版本區日誌(單行顯示)
    $ git log --graph                 //查看版本區日誌(圖形化顯示)
複製代碼

八、分支

  • 要先提交一次建立主分支,HEAD指針默認指向master分支,每次提交到版本區就被視做爲一個節點,在主分支的基礎上添加一個分支,在分支上進行提交,最後切換到主分支來合併分支。
  • 若是分支文件沒有衝突Git能夠自動合併,若是有衝突須要手動刪除不想要的保留想要的代碼,手動解決完成後再進行commit操做。
    branch
$ git branch                //查看本地分支
    $ git branch -r             //查看全部遠程分支
    $ git branch -a             //查看全部本地和遠程分支
    $ git branch 分支名         //建立分支
    $ git checkout 分支名       //切換分支,切換HEAD指針指向
    $ git checkout -b 分支名    //建立並切換分支
    $ git branch -d 分支名      //刪除分支,有修改但未合併的分支不能刪除
    $ git branch -D 分支名      //強制刪除分支,刪除分支不能在當前分支裏面
    $ git merge 分支名          //合併分支
複製代碼
  • 咱們有時會遇到這樣的狀況,正在dev分支開發新功能,作到一半時有人過來反饋一個bug,讓立刻解決,可是新功能作到了一半你又不想提交,這時就可使用git stash命令先把當前進度保存起來,而後切換到另外一個分支去修改bug,修改完提交後,再切回dev分支,使用git stash pop來恢復以前的進度繼續開發新功能。

stash

$ git stash                   //存儲最新進度文件,暫存區文件覆蓋到工做區
    $ git stash save '暫存說明'   //存儲文件附加說明
    $ git stash list              //進度文件列表
    $ git stash pop               //還原最新的進度文件到工做區,並將儲存的進度刪除
    $ git stash pop --index       //恢復進度到工做區,在儲存進度以前工做區提交過暫存區,也將暫存區恢復
    $ git stash pop stash@{1}     //恢復指定的進度到工做區,stash@{1}爲進度ID,能夠用過git stash list查詢
    $ git stash apply             //除了不會刪除儲存的進度,其餘與git stash pop命令相同
    $ git stash apply --index     //除了不會刪除儲存的進度,其餘與git stash pop --index命令相同
    $ git stash apply stash@{1}   //除了不會刪除儲存的進度,其餘與git stash pop stash@{1}命令相同
    $ git stash drop stash@{1}    //刪除一個儲存的進度。若是不指定id,則默認刪除最新的存儲進度
    $ git stash clear             //刪除全部儲存的進度
複製代碼

九、GitHub

9.1 註冊登陸

  • 訪問GitHub主頁,輸入用戶名、郵箱、密碼進行登陸
    登陸
  • 沒有帳號能夠按步驟進行註冊
    註冊

9.2 遠程倉庫

  • 建立倉庫
    主頁
    建立倉庫
  • 關聯遠程倉庫
    關聯遠程倉庫
  • 建立一個新項目
$ makedir test
複製代碼
  • 建立README.md
$ echo "# test" >> README.md
複製代碼
  • 建立.gitignore文件,若是有不想提交的文件就寫在裏面
$ echo "不想提交的文件名" >> .gitignore
複製代碼
  • 初始化
$ git init
複製代碼
  • 提交項目
$ git add .
    $ git commit -m "first commit"
複製代碼
  • git不會上傳空文件夾,在空文件夾內建立.gitkeep能夠上傳此空文件夾
  • 關聯遠程倉庫,別名:origin
$ git remote add origin https://github.com/SainHe/test.git
複製代碼
  • 將master分支推送到遠程倉庫,第一次寫上-u會記錄別名和分支名,之後再用同樣的參數就能夠不用加任何參數使用git push了
$ git push -u origin master
複製代碼
  • 拉取遠程倉庫代碼至本地
$ git pull origin master
複製代碼
  • 查看全部遠程關聯倉庫
$ git remote -v
複製代碼
  • 刪除遠程關聯倉庫
$ git remote rm origin
複製代碼

9.3 發佈靜態頁

  • 在項目中建立一個gh-pages的分支
git checkout -b gh-pages
    touch index.html
    echo 首頁 > index.html
複製代碼
  • 再將gh-pages分支提交到遠程倉庫
git add .
    git commit -m "message"
    git push origin gh-pages
複製代碼
  • 在settings找到github-pages找到生成的網址
    settings
    github-pages

9.4 項目拉取到本地

  • 查找要拉取的項目倉庫
    git
  • 複製遠程倉庫地址
    clone
  • 拉取到本地
$ git clone 遠程倉庫地址 origin
複製代碼
  • 拉取到本地的文件夾默認就是git倉庫並且有origin地址,能夠將代碼提交到本身的GitHub

9.5 更改別人代碼

  • Fork是在當前項目下克隆一份,若是代碼更新,不會隨之更新
    Fork
  • 進入本身Fork的倉庫,點擊New pull request將代碼請求提交給原做者
    pull
  • 只有Fork關係才能發送pull request請求
  • Pull requests查看別人提交的更改請求

9.6 添加貢獻者

  • setting——Collaborators——輸入要邀請合做的人點擊add collaborator添加貢獻者,被添加的人擁有最大權限
    Collaborators

9.7 問題留言

  • 點擊Issues,能夠就項目的問題給開發者留言
    Issues
相關文章
相關標籤/搜索