git基礎入門
-
Git是一款免費、開源的分散式 版本控制系統 ,用於敏捷高效地處理任何或小或大的專案。
-
Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
git的安裝
-
下載地址 git-scm.com/
-
注意:
-
不要安裝在中文目錄
-
不要使用桌面管理軟體
-
安裝很簡單,一直下一步即可。在任意的目錄下右鍵,能看到選單, 就表示安裝成功了。
-
git使用
-
使用git的兩種方式
-
git gui,即圖形化介面的方式
-
git bash,命令列的方式(推薦)
-
-
git倉庫會分成三個區
-
工作區:我們書寫程式碼的地方,工作的目錄就叫工作區。
-
暫存區:暫時儲存的區域,在git中,程式碼無法直接從工作區提交到倉庫區,而是需要先從工作區新增到暫存區,然後才能從暫存區提交到倉庫區。暫存區的目的是避免誤操作。
-
本地倉庫區:將儲存在暫存區域的內容永久轉儲到 Git 倉庫中,生成版本號。生成版本號之後,就可以任何的回退到某一個具體的版本。
-
-
git基本命令
- git init作用:初始化git倉庫,想要使用git對某個專案進行管理,需要git init進行初始化
-
git初始化注意點
- 要對某個專案使用git進行管理,需要使用git init命令初始化git倉庫git init會在當前目錄生成一個隱藏資料夾 .git 不要去修改這個資料夾下的任意東西。
-
初始化倉庫, 在當前目錄下生成一個隱藏資料夾.git
-
git init
-
git add作用:將檔案由 工作區 新增到 暫存區,在git中,檔案無法直接從工作區直接新增到倉庫區,必須先從工作區新增到暫存區,再從暫存區新增到倉庫區。
-
命令:git add 檔名/目錄名
-
-
將index.html新增到暫存區
- git add index.html
-
將css目錄下所有的檔案新增到暫存區
- git add css
-
將當前目錄下所有的js檔案新增到暫存區
- git add *.js
-
新增當前目錄下所有的檔案
- git add .
- git add -A
- git add –all
- git commit作用:將檔案由 暫存區 新增到 倉庫區,生成版本號
-
將檔案從暫存區提交到倉庫
- git commit -m “提交說明”
-
如果不寫提交說明,會進入vi編輯器,沒有寫提交說明,是提交不成功的。
- git commit # 需要使用vi輸入內容
-
如果是一個已經暫存過的檔案,可以快速提交,如果是未追蹤的檔案,那麼命令將不生效。
- git commit -a -m ‘提交說明’
-
修改最近的一次提交說明, 如果提交說明不小心輸錯了,可以使用這個命令
- git commit –amend -m “提交說明”
- git config配置
- 如果是第一次提交,需要配置提交者資訊,推薦和github的賬號郵箱一致
- git config user.name 你的目標使用者名稱
- git config user.email 你的目標郵箱名
-
使用–global引數,配置全域性的使用者名稱和郵箱,只需要配置一次即可。推薦配置github的使用者名稱和密碼
- git config –global user.name Jepson
- git config –global user.email jepsonpp@qq.com
-
檢視配置資訊
- git config –list
- git status作用:檢視檔案的狀態
-
命令:git status
-
紅色表示工作區中的檔案需要提交
-
綠色表示暫存區中的檔案需要提交
-
-
命令:git stauts -s 簡化日誌輸出格式
-
命令:git log作用:檢視提交日誌
-
命令:git log 檢視提交的日誌
-
命令:git log –oneline 簡潔的日誌資訊
-
git對比
-
git diff
-
git diff可以檢視每次提交的內容的不同
-
檢視工作區與暫存區的不同
- git diff
-
檢視暫存區與倉庫區的不同
- git diff –cached
-
檢視工作區與倉庫區的不同,HEAD表示最新的那次提交
- git diff HEAD
-
檢視兩個版本之間的不同
- git diff c265262 de4845b
-
-
git重置
-
git reset作用:版本回退,將程式碼恢復到已經提交的某一個版本中。
-
git reset –hard 版本號 將程式碼回退到某個指定的版本(版本號只要有前幾位即可)
-
git reset –hard head~1將版本回退到上一次提交
~1:上一次提交
~2:上上次提交
~0:當前提交
-
-
關於引數 –hard的解釋
- git reset 的引數可以是以下三個值:
- git reset –soft 版本號 : 只重置倉庫區
- git reset –mixed 版本號 : 重置倉庫區和暫存區【預設】
- git reset –hard 版本號 : 重置倉庫區和暫存區和工作區。
- git reset 版本號 : 效果與–mixed一致
- 當使用了git reset命令後,版本會回退,使用git log只能看到當前版本之前的資訊。使用git reflog可以檢視所有的版本資訊
git忽視檔案
-
在倉庫中,有些檔案是不想被git管理的,比如資料的配置密碼、寫程式碼的一些思路等。git可以通過配置從而達到忽視掉一些檔案,這樣這些檔案就可以不用提交了。
-
在倉庫的根目錄建立一個.gitignore的檔案,檔名是固定的。
-
將不需要被git管理的檔案路徑新增到.gitignore中
-
忽視idea.txt檔案
- idea.txt
-
忽視.gitignore檔案
- .gitignore
-
忽視css下的index.js檔案
- css/index.js
-
忽視css下的所有的js檔案
- css/*.js
-
忽視css下的所有檔案
- css/.
-
忽視css資料夾
- css
git分支操作
- 分支就是科幻電影裡面的平行宇宙,當你正在電腦前努力學習Git的時候,另一個你正在另一個平行宇宙裡努力學習SVN。
如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了Git又學會了SVN!
-
為什麼要有分支?》如果你要開發一個新的功能,需要2周時間,第一週你只能寫50%程式碼,如果此時立即提交,程式碼沒寫完,不完整的程式碼會影響到別人無法工作。如果等程式碼寫完再提交,程式碼很容易丟失,風險很大。有了分支,你就可以建立一個屬於自己的分支,別人看不到,也不影響別人,你在自己的分支上工作,提交到自己的分支上,等到功能開發完畢,一次性的合併到原來的分支。這樣既安全,又不影響他人工作。在工作過程中,經常會碰到多工並行開發 的情況,使用分支就能很好的避免任務之間的影響。
-
其他版本工具比如svn,cvs中也有分支這個概念,但是這些工具中的分支操作非常的慢,形同擺設。
-
git分支命令
-
在git中,分支實質上僅僅是一個指標,每次程式碼提交後,這個分支指標就會向後移動,保證一直指向最後一次提交的的版本。git中使用HEAD指向當前分支
-
建立分支
- git branch 分支名稱建立分支,分支中的程式碼,在建立時與當前分支的內容完全相同。
-
git在第一次提交時,就有了一個叫master的主分支。
-
git branch dev,建立了一個叫做dev的分支
-
檢視分支
-
git branch可以檢視所有的分支,
-
在當前分支的前面會有一個*
-
在git中,有一個特殊指標HEAD,永遠會指向當前分支
-
-
切換分支
-
git checkout 分支名稱切換分支 HEAD指標指向了另一個分支
-
在當前分支的任何操作,都不會影響到其他的分支,除非進行了分支合併。
-
提交程式碼時,會生產版本號,當前分支會指向最新的版本號。
-
-
建立並切換分支
-
git checkout -b 分支名稱 建立並切換分支
-
切換分支會做兩件事情
-
建立一個新分支
-
把head指標指向當前的分支
-
-
刪除分支
- git branch -d 分支名稱 可以刪除分支
-
注意:不能在當前分支刪除當前分支,需要切換到其他分支才能刪除。
注意:master分支是可以刪除的,但是不推薦那麼做。
- 合併分支
-
git merge 分支名稱 將其他分支的內容合併到當前分支。
-
在master分支中執行git merge dev 將dev分支中的程式碼合併到master分支
-
git合併衝突
-
對於同一個檔案,如果有多個分支需要合併時,容易出現衝突。
-
合併分支時,如果出現衝突,只能手動處理,再次提交,一般的作法,把自己的程式碼放到衝突程式碼的後面即可。
-
-
git遠端倉庫
-
github與git
-
git與github沒有直接的關係。
-
git是一個版本控制工具。
-
github是一個程式碼託管平臺,開源社群,是git的一個遠端程式碼倉庫。
- gitHub是一個面向開源及私有軟體專案的託管平臺,因為只支援git 作為唯一的版本庫格式進行託管,故名gitHub。
- 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
- 作用:將遠端的程式碼下載到本地
注意:通常在push前,需要先pull一次。
-
獲取遠端倉庫的更新,並且與本地的分支進行合併
- git pull
- git remote
- 每次push操作都需要帶上遠端倉庫的地址,非常的麻煩,我們可以給倉庫地址設定一個別名
-
給遠端倉庫設定一個別名
- git remote add 倉庫別名 倉庫地址
- git remote add why git@github.com:XXX/test.git
-
刪除why這個別名
- git remote remove why
-
git clone的倉庫預設有一個origin的別名
SSH免密碼登陸
-
git支援多種資料傳輸協議:
-
https協議:github.com/jepsongithu… 需要輸入使用者名稱和密碼
-
ssh協議:git@github.com:jepsongithub/test.git 可以配置免密碼登入
-
-
每次push或者pull程式碼,如果使用https協議,那麼都需要輸入使用者名稱和密碼進行身份的確認,非常麻煩。
github為了賬戶的安全,需要對每一次push請求都要驗證使用者的身份,只有合法的使用者才可以push
使用ssh協議,配置ssh免密碼,可以做到免密碼往github推送程式碼
-
SSH免密碼登入配置
注意:這些命令需要在bash中敲
-
建立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-pages的使用
-
github 允許建立一個非常特殊的一個倉庫使用者名稱.github.io 比如 why.github.io`
-
clone下來新建index.html頁面內容提交
結語
- 篇幅比較長,基本涵蓋了我們日常的操作,可以收藏下來,忘了的時候看下