1. 程式人生 > >Git基礎教程_git、github基礎入門教程_純乾貨

Git基礎教程_git、github基礎入門教程_純乾貨

Git基礎入門教程

1、Git簡介

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。Git是Linus Torvalds 為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。

1.1 Git的主要功能

  1. 檔案備份
  2. 版本管理
  3. 多端共享

1.2 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因為多了新增到暫存區的步驟,這種出錯情況會少些。

2、各系統Git安裝

2.1 linux系統安裝Git

  • 如果是Debian或Ubuntu可以使用下列命令完成Git的安裝。
$ sudo apt-get install git
  • 其他Linux版本,可以直接通過原始碼安裝。先從Git官網https://git-scm.com/downloads下載原始碼,然後解壓,依次輸入下列命令完成Git安裝。
$ ./config
$ make
$ sudo make install

2.2 Mac OS系統安裝Git

  1. 通過AppStore安裝Xcode,Xcode集成了Git,不過預設是沒有安裝的,選擇選單“Xcode”>“Preferences”,在彈出視窗中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。

2.3 Windows系統安裝Git

  • 可以從Git官網直接下載安裝程式,按照預設安裝即可。安裝完成後執行Git Bash,彈出下圖視窗表示安裝成功。
    windows Git

3、Linux常用命令

Git Bash使用的是Linux命令,下面列出了Linux的一些常用命令供大家參考。

命令 用途 備註
rm -rf 資料夾名 刪除資料夾 慎用!如果不指定資料夾將會刪除當前目錄下所有資料夾,而且被刪除的檔案不能恢復!!!
rm 檔名 刪除檔案
mkdir 資料夾名 新建資料夾
cd 目錄名 切換目錄
cd ../ 返回上級目錄
ls -al 顯示當前目錄所有檔案 包括隱藏檔案
touch 檔名 新建檔案
cat 檔名 檢視檔案
mv 檔名 目標路徑 移動檔案
echo 內容 > 檔名 建立並輸入內容到指定檔案
echo 內容 >> 檔名 追加內容到指定檔案
vi 檔名 用vi編輯檔案 插入模式:按 i
退出編輯模式:按 esc
強制退出:輸入:q!
儲存後退出:輸入:wq

4、Git分割槽

git分割槽

  • Git分為工作區、暫存區和版本區
    • 工作區:程式碼(檔案)編輯的地方
    • 暫存區:暫時快取檔案的地方,Git對比SVN來說,SVN中是沒有暫存區這個概念,程式碼直接從工作區提交到版本區,但是這樣有不好的地方。在git中,暫存區的作用是:
      1. 為了避免工作過程中出現的一些誤操作,保護工作區和版本區(版本回退和撤銷)
      2. 可以進行分支處理
    • 版本區:本地最終程式碼存放的地方,從版本區中將檔案提交到遠端github倉庫中
  • 檢視檔案狀態
$ git status
  • 工作區檔案為紅色
  • 提交到暫存區的檔案為綠色
  • 提交到版本區檢視檔案狀態會顯示nothing to commit, working tree clean

5、Git初始化

  • 安裝完成後需要設定使用者名稱和郵箱
$ git config --global user.name "YourName"              //設定使用者名稱
$ git config --global user.email "[email protected]"    //設定郵箱

如果用了 –global 選項,那麼更改的配置檔案就是位於你使用者主目錄下的那個,以後你所有的專案都會預設使用這裡配置的使用者資訊。
如果要在某個特定的專案中使用其他名字或者電子郵箱,只要去掉 –global 選項重新配置即可,新的設定儲存在當前專案的 .git/config 檔案裡。

  • 初始化Git(建立工作區)
$ cd d:git          //切換到需要初始化的目錄
$ git init          //初始化
  • 當前目錄後面出現(master)就是已經被git管理了,master是預設分支,資料夾裡會新建名為.git的隱藏資料夾
    master
    .git
  • 如果要取消當前資料夾被Git管理,刪除當前目錄下的.git資料夾即可,刪除命令(慎用!如果不指定資料夾將會刪除當前目錄下所有資料夾,而且被刪除的檔案不能恢復!!!):
$ rm -rf .git
  • 不要在資料夾裡初始化,然後再進子資料夾初始化,因為專案不能巢狀專案。

6、提交檔案

-am

$ git add 'File Name'                  //將工作區檔案提交到暫存區
$ git add .                            //將工作區全部檔案提交到暫存區
$ git rm --cached 'File Name'          //刪除暫存區檔案
$ git rm --cached . -r                 //遞迴刪除暫存區
$ git commit -m 'Version Description'  //提交到版本區
$ git commit -am 'Version Description' //從工作區直接提交到暫存區和版本區,檔案需要提交到暫存區一次
$ git log                              //檢視日誌

7、檔案比較與版本切換

7.1 檔案比較

diff

$ git diff              //比較工作區和暫存區
$ git diff head         //比較工作區和版本區
$ git diff --cached     //比較暫存區和版本區

7.2 版本切換

checkout

$ git checkout .                 //從暫存區將工作區全部覆蓋
$ git checkout 'File Name'        //從暫存區將工作區指定檔案覆蓋
$ git reset HEAD                 //從版本區拉取上一版本到暫存區
$ git reset --hard 'Version ID'  //版本區變更到指定版本
$ git reset HEAD^                //版本區返回到上一版本,有幾個^就代表返回上幾個版本
$ git reflog                     //檢視所有版本區版本
$ git log --oneline              //檢視版本區日誌(單行顯示)
$ git log --graph                //檢視版本區日誌(圖形化顯示)

8、分支

  • 要先提交一次建立主分支,HEAD指標預設指向master分支,每次提交到版本區就被視作為一個節點,在主分支的基礎上新增一個分支,在分支上進行提交,最後切換到主分支來合併分支。
  • 如果分支檔案沒有衝突Git可以自動合併,如果有衝突需要手動刪除不想要的保留想要的程式碼,手動解決完成後再進行commit操作。
    branch
$ git branch                   //檢視本地分支
$ git branch -r                //檢視所有遠端分支
$ git branch -a                //檢視所有本地和遠端分支
$ git branch 'Branch Name'     //建立分支
$ git checkout 'Branch Name'   //切換分支,切換HEAD指標指向
$ git checkout -b 'Branch Name'//建立並切換分支
$ git branch -d 'Branch Name'  //刪除分支,有修改但未合併的分支不能刪除
$ git branch -D 'Branch Name'  //強制刪除分支,刪除分支不能在當前分支裡面
$ git merge 'Branch Name'      //合併分支
  • 我們有時會遇到這樣的情況,正在dev分支開發新功能,做到一半時有人過來反饋一個bug,讓馬上解決,但是新功能做到了一半你又不想提交,這時就可以使用git stash命令先把當前進度儲存起來,然後切換到另一個分支去修改bug,修改完提交後,再切回dev分支,使用git stash pop來恢復之前的進度繼續開發新功能。
    stash
$ git stash                            //儲存最新進度檔案,暫存區檔案覆蓋到工作區
$ git stash save 'Stash Description'   //儲存檔案附加說明
$ git stash list                       //進度檔案列表
$ git stash pop                        //還原最新的進度檔案到工作區,並將儲存的進度刪除
$ git stash pop --index                //恢復進度到工作區,在儲存進度之前工作區提交過暫存區,也將暫存區恢復
$ git stash pop 'StashID'              //恢復指定的進度到工作區,StashID可以用過git stash list查詢
$ git stash apply                      //除了不會刪除儲存的進度,其他與git stash pop命令相同
$ git stash apply --index              //除了不會刪除儲存的進度,其他與git stash pop --index命令相同
$ git stash apply 'StashID'            //除了不會刪除儲存的進度,其他與git stash pop命令相同
$ git stash drop 'StashID'             //刪除一個儲存的進度。如果不指定ID,則預設刪除最新的儲存進度
$ git stash clear                      //刪除所有儲存的進度

9、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 content > 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

相關推薦

Git基礎教程_gitgithub基礎入門教程_乾貨

Git基礎入門教程 1、Git簡介 Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。Git是Linus Torvalds 為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。 1

java基礎學習——21IO基礎

alt buffer create 解壓縮 最好的 寫入文本 pro you 轉換成 計算機最重要的功能是處理數據。一個有用的計算機語言需要擁有良好的IO功能,以便讓未處理的數據流入程序,讓已處理的數據流出。 與其他語言相比,Java的IO功能顯得復雜。在其他語言中,許多I

git學習——設定gitlabgithub預設push的使用者名稱和密碼

在使用git的時候,不同的環境下,當你重新安裝git,最好在開始的時候就配置一下預設的git的使用者名稱和密碼,這樣子就可以在每次的push的時候不需要手動的在去輸入git的使用者名稱和密碼,提高執行的效率。 環境:Windows環境已經安裝git,我使用的gi

原創教程之——reactjs 組件入門教程

劃分 擴展 大寫 準備 -h 編寫 www. end exp 在學習react之前,希望你有以下準備: react的安裝ECMAScript 6基礎 本文不講解react的安裝步驟,若需了解請移步官方網站(https://reactjs.org/),那裏講解非常清楚,也

2018最強web前端教程免費領:90G入門教程+開發工具+名企專案實戰

1.150G web前端教程 因為標題字數要求字數限制,所以檸檬將150G寫成了90G .這對小夥伴們來說就是隱藏福利 哈哈!   直接上圖看!   這是視訊課程的內容!   這是第一部分的具體內容!  

《TypeScript 中文入門教程》 1基礎數據類型

數據 技術分享 scrip bstr 聯合 卻又 true 單引號 介紹 轉載:https://github.com/MyErpSoft/TypeScript-Handbook/blob/master/pages/zh-CHS/Basic%20Types.md 概述 為了

2018年Vue2.x 5小時入門視訊教程-包括VuexMintUiElementUi基礎教程28講

2018年Vue2.x 5小時入門視訊教程-包括Vuex、MintUi、ElementUi基礎教程28講 https://pan.baidu.com/s/1p4cPuo_t70Eh0D_dzfJq2Q ----------------------課程目錄-----------------

Java NIO基礎視訊教程MINA視訊教程Netty快速入門視訊 [有原始碼]

想要這套視訊教程的同學,可以掃描下方微信二維碼,關注“業餘草”微信公眾號,回覆“NIO“關鍵字即可免費下載! 感謝您的關注!可加QQ1群:135430763(2000人群已滿),

Git&GitHub-基礎教程

輸出 1.2 撤銷 auth ini diff ftw hang out 目錄 1. Git簡介 1.1 什麽是版本控制系統? 1.2. Git的歷史 1.3. 什麽是分布式?什麽是集中式? 2. Git安裝 3. 創建一個版本庫 4. Git的語法教程 4.1. 提交

Python基礎入門教程,Python學習路線圖

第一天 字符 語法 知識 國內 排序 inux 跟著 最好的 給大家整理的這套python學習路線圖,按照此教程一步步的學習來,肯定會對python有更深刻的認識。或許可以喜歡上python這個易學,精簡,開源的語言。此套教程,不但有視頻教程,還有源碼分享,讓大家能真正

【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求

情況 led 興趣 題目 嵌入式開發 廣東 難點 在一起 參數 【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求 廣東職業技術學院 歐浩源 一、引用 不管是簡單的單片機應用,還是復雜的嵌入式系統,在我看來它們的本質結構是差不多的,都離不開“

手把手教你入門MySQL零基礎入門教程

手把手教你入門MySQL零基礎入門教程! 目前MySQL已經成為最為流行的開源關系數據庫系統,並且一步一步地占領了原有商業數據庫的市場。可以看到Google、Facebook、Yahoo、網易、久遊等大公司都在使用MySQL數據庫,甚至將其作為核心應用的數據庫系統。而My

Web前端丨Web開發丨Web代碼 html+css零基礎入門教程

strong 大型 打字 添加 瀏覽器 lock 效果 格式化文本 size 什麽是HTML文本格式化 HTML 可定義很多供格式化輸出的元素,比如粗體和斜體字。 如下代碼: <p>TThis text is normal</p><b>

JavaScript基礎入門教程(一)

構造 圖片 def type 屬於 string 意思 原則 原始類型 js的數據類型   雖然js屬於弱類型語言,但其總共有6種數據類型。弱類型的意思是定義的變量沒有類型的區分,比如先執行 var num=123; 定義了一變量num存儲整數,可接下來執行 num="he

JavaScript基礎入門教程(二)

alert .get OS 全部 isnan rep mut 分別是 只有一個 說明   前一篇博客介紹了js以及一些關於js基本類型的簡單知識,本篇博客將詳細介紹js的基礎類型,捎帶介紹對象類型,更詳細的對象類型的說明將後續再講。 js中類型的說明   js中的類型分

JavaScript基礎入門教程(三)

直接 復制 一般來說 得到 方式 註意 元素 nbsp 通過 說明   前面的兩篇博客介紹了js中的基本知識中的變量類型、標識符等。這篇博客主要談表達式以及運算符。 原始表達式   原始表達式就是表達式中最小的,不能在分割的表達式,一般指變量、常數直接量、關鍵字(tru

Linux發行版介紹Linux系統基礎使用入門Linux命令幫助Linux基礎命令

系統運維 Linux 計算機打的基礎知識:CPU(運算器、控制器)、memory、I/O(輸入設備、輸出設備) 程序運行模式: 用戶空間:user space,us (可執行普通指令) 內核空間:system space (可執行特權指令) POS:Postable Operatin

git-github-TortoiseGit綜合使用教程(二)快速入門

克隆 程序 總結 https .com 推送 tag b- 標簽 一:建立版本庫 在github網站上創建一個版本庫,並復制clone地址。 [email protected]:jackadam1981/Flask_Base.git https://github.com/j

jQuery從零開始基礎入門教程及參數匯總

mouse 開發 lba 情況下 slide -o 更多 直接 source 1、通過百度的CDN 2、下載jQuery.js文件,然後引入 註意事項:jQuery文件如果放在https://blog.csdn.net/zhoucheng05_13/resources/文

Enscape免費教程 | Enscape for SketchUp 中文基礎入門教程正式上線

作者| 活力網 May Cheng Hi,大家好! 隨著Redshift、Blender Cycles等諸多渲染器逐漸進入渲染這個圈子 大家可能不知道,“渲染”這個行業正在迎來一場革命! 那就是GPU渲染! 我們今天所介紹的就是一款基於GPU的實時渲染器、實時漫遊工具 它與Lumio