Git是一款免費、開源的分佈式 版本控制系統 ,用於敏捷高效地處理任何或小或大的項目。css
Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。html
下載地址 git-scm.com/git
注意:github
不要安裝在中文目錄安全
不要使用桌面管理軟件bash
安裝很簡單,一直下一步便可。在任意的目錄下右鍵,能看到菜單, 就表示安裝成功了。ssh
使用git的兩種方式編輯器
git gui,即圖形化界面的方式分佈式
git bash,命令行的方式(推薦)ide
git倉庫會分紅三個區
工做區:咱們書寫代碼的地方,工做的目錄就叫工做區。
暫存區:暫時存儲的區域,在git中,代碼沒法直接從工做區提交到倉庫區,而是須要先從工做區添加到暫存區,而後才能從暫存區提交到倉庫區。暫存區的目的是避免誤操做。
本地倉庫區:將保存在暫存區域的內容永久轉儲到 Git 倉庫中,生成版本號。生成版本號以後,就能夠任何的回退到某一個具體的版本。
git基本命令
git初始化注意點
初始化倉庫, 在當前目錄下生成一個隱藏文件夾.git
git init
git add 做用:將文件由 工做區 添加到 暫存區,在git中,文件沒法直接從工做區直接添加到倉庫區,必須先從工做區添加到暫存區,再從暫存區添加到倉庫區。
命令:git add 文件名/目錄名
將index.html添加到暫存區
將css目錄下全部的文件添加到暫存區
將當前目錄下全部的js文件添加到暫存區
添加當前目錄下全部的文件
將文件從暫存區提交到倉庫
若是不寫提交說明,會進入vi編輯器,沒有寫提交說明,是提交不成功的。
若是是一個已經暫存過的文件,能夠快速提交,若是是未追蹤的文件,那麼命令將不生效。
修改最近的一次提交說明, 若是提交說明不當心輸錯了,可使用這個命令
使用--global參數,配置全局的用戶名和郵箱,只須要配置一次便可。推薦配置github的用戶名和密碼
查看配置信息
命令:git status
紅色表示工做區中的文件須要提交
綠色表示暫存區中的文件須要提交
命令:git stauts -s 簡化日誌輸出格式
命令:git log 做用:查看提交日誌
命令:git log 查看提交的日誌
命令:git log --oneline 簡潔的日誌信息
git對比
git diff
git diff能夠查看每次提交的內容的不一樣
查看工做區與暫存區的不一樣
查看暫存區與倉庫區的不一樣
查看工做區與倉庫區的不一樣,HEAD表示最新的那次提交
查看兩個版本之間的不一樣
git重置
git reset 做用:版本回退,將代碼恢復到已經提交的某一個版本中。
git reset --hard 版本號 將代碼回退到某個指定的版本(版本號只要有前幾位便可)
git reset --hard head~1將版本回退到上一次提交
~1:上一次提交
~2:上上次提交
~0:當前提交
關於參數 --hard的解釋
在倉庫中,有些文件是不想被git管理的,好比數據的配置密碼、寫代碼的一些思路等。git能夠經過配置從而達到忽視掉一些文件,這樣這些文件就能夠不用提交了。
在倉庫的根目錄建立一個.gitignore的文件,文件名是固定的。
將不須要被git管理的文件路徑添加到.gitignore中
忽視idea.txt文件
忽視.gitignore文件
忽視css下的index.js文件
忽視css下的全部的js文件
忽視css下的全部文件
忽視css文件夾
若是兩個平行宇宙互不干擾,那對如今的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了Git又學會了SVN!
爲何要有分支? 》若是你要開發一個新的功能,須要2周時間,第一週你只能寫50%代碼,若是此時當即提交,代碼沒寫完,不完整的代碼會影響到別人沒法工做。若是等代碼寫完再提交,代碼很容易丟失,風險很大。 有了分支,你就能夠建立一個屬於本身的分支,別人看不到,也不影響別人,你在本身的分支上工做,提交到本身的分支上,等到功能開發完畢,一次性的合併到原來的分支。這樣既安全,又不影響他人工做。 在工做過程當中,常常會碰到多任務並行開發 的狀況,使用分支就能很好的避免任務之間的影響。
其餘版本工具好比svn,cvs中也有分支這個概念,可是這些工具中的分支操做很是的慢,形同擺設。
git分支命令
在git中,分支實質上僅僅是一個指針,每次代碼提交後,這個分支指針就會向後移動,保證一直指向最後一次提交的的版本。git中使用HEAD指向當前分支
建立分支
git在第一次提交時,就有了一個叫master的主分支。
git branch dev,建立了一個叫作dev的分支
查看分支
git branch能夠查看全部的分支,
在當前分支的前面會有一個*
在git中,有一個特殊指針HEAD,永遠會指向當前分支
切換分支
git checkout 分支名稱切換分支 HEAD指針指向了另外一個分支
在當前分支的任何操做,都不會影響到其餘的分支,除非進行了分支合併。
提交代碼時,會生產版本號,當前分支會指向最新的版本號。
建立並切換分支
git checkout -b 分支名稱 建立並切換分支
切換分支會作兩件事情
建立一個新分支
把head指針指向當前的分支
刪除分支
git merge 分支名稱 將其餘分支的內容合併到當前分支。
在master分支中執行git merge dev 將dev分支中的代碼合併到master分支
git合併衝突
對於同一個文件,若是有多個分支須要合併時,容易出現衝突。
合併分支時,若是出現衝突,只能手動處理,再次提交,通常的做法,把本身的代碼放到衝突代碼的後面便可。
github與git
git與github沒有直接的關係。
git是一個版本控制工具。
github是一個代碼託管平臺,開源社區,是git的一個遠程代碼倉庫。
git clone
做用:克隆遠程倉庫的代碼到本地
git clone [遠程倉庫地址]
git clone git://github.com/jepsongithub/test.git會在本地新建一個test文件夾,在test中包含了一個.git目錄,用於保存全部的版本記錄,同時test文件中還有最新的代碼,你能夠直接進行後續的開發和使用。
git克隆默認會使用遠程倉庫的項目名字,也能夠本身指定。須要是使用如下命令:git clone [遠程倉庫地址] [本地項目名]
git push
做用:將本地倉庫中代碼提交到遠程倉庫
git push 倉庫地址 master 在代碼提交到遠程倉庫,注意master分支必須寫,不能省略
例子:git push XXX master 若是第一次使用,須要填寫github的用戶名和密碼
git pull
獲取遠程倉庫的更新,而且與本地的分支進行合併
給遠程倉庫設置一個別名
刪除why這個別名
git clone的倉庫默認有一個origin的別名
git支持多種數據傳輸協議:
https協議:github.com/jepsongithu… 須要輸入用戶名和密碼
ssh協議:git@github.com:jepsongithub/test.git 能夠配置免密碼登陸
每次push或者pull代碼,若是使用https協議,那麼都須要輸入用戶名和密碼進行身份的確認,很是麻煩。
github爲了帳戶的安全,須要對每一次push請求都要驗證用戶的身份,只有合法的用戶才能夠push
使用ssh協議,配置ssh免密碼,能夠作到免密碼往github推送代碼
SSH免密碼登陸配置
建立SSH Key:ssh-keygen -t rsa
在文件路徑 C:\用戶\當前用戶名\ 找到 .ssh 文件夾
文件夾中有兩個文件:
私鑰:id_rsa
公鑰:id_rsa.pub
在 github -> settings -> SSH and GPG keys頁面中,新建立SSH key
粘貼 公鑰 id_rsa.pub 內容到對應文本框中
在github中新建倉庫或者使用如今倉庫,拿到git@github.com:用戶名/倉庫名.git
此後,再次SSH方式與github「通訊」,不用輸入密碼確認身份了
github 容許建立一個很是特殊的一個倉庫用戶名.github.io 好比 why.github.io`
clone下來新建index.html頁面內容提交