Git是一款免費、開源的分佈式 版本控制系統 ,用於敏捷高效地處理任何或小或大的項目。css
Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。html
下載地址git
注意:github
若是是第一次提交,須要配置提交者信息,推薦和gitee的帳號郵箱一致算法
# git config user.name 你的目標用戶名 # git config user.email 你的目標郵箱名 # 使用--global參數,配置全局的用戶名和郵箱,只須要配置一次便可。推薦配置gitee的用戶名和密碼 git config --global user.name Jepson git config --global user.email jepsonpp@qq.com # 查看配置信息 git config --list # 重置 git config --unset --global user.name git config --unset --global user.email
要對某個項目使用git進行管理,須要使用git init
命令初始化git倉庫git init
會在當前目錄生成一個隱藏文件夾 .git 不要去修改這個文件夾下的任意東西。安全
git倉庫會分紅三個區bash
工做區:咱們書寫代碼的地方,工做的目錄就叫工做區。ssh
暫存區:暫時存儲的區域,在git中,代碼沒法直接從工做區提交到倉庫區,而是須要先從工做區添加到暫存區,而後才能從暫存區提交到倉庫區。暫存區的目的是避免誤操做。編輯器
本地倉庫區:將保存在暫存區域的內容永久轉儲到 Git 倉庫中,生成版本號。生成版本號以後,就能夠任何的回退到某一個具體的版本。分佈式
git init
進行初始化# 初始化倉庫, 在當前目錄下生成一個隱藏文件夾.git git init
工做區
添加到 暫存區
,在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 -m "提交說明" # 若是不寫提交說明,會進入vi編輯器,沒有寫提交說明,是提交不成功的。 git commit # 須要使用vi輸入內容 # 退出vi編輯器 1-按esc鍵 2-輸入 :q! 按回車便可退出 # 若是是一個已經暫存過的文件,能夠快速提交,若是是未暫存的文件,那麼命令將不生效。 git commit -a -m '提交說明' # 修改最近的一次提交說明, 若是提交說明不當心輸錯了,可使用這個命令 git commit --amend -m "提交說明"
做用:查看文件的狀態
git status
git stauts -s
簡化日誌輸出格式git log
查看提交的日誌git log --oneline
簡潔的日誌信息git diff
能夠查看每次提交的內容的不一樣
# 查看工做區與暫存區的不一樣 git diff # 查看暫存區與倉庫區的不一樣 git diff --cached # 查看工做區與倉庫區的不一樣,HEAD表示最新的那次提交 git diff HEAD # 查看兩個版本之間的不一樣 git diff wz12384 sg7821d
git reset --hard 版本號
將代碼回退到某個指定的版本(版本號只要有前幾位便可)git reset --hard head~1
將版本回退到上一次提交
關於參數 --hard的解釋 git reset 的參數能夠是如下三個值: git reset --soft 版本號 : 只重置倉庫區 (瞭解) git reset --mixed 版本號 : 重置倉庫區和暫存區【默認】(瞭解) git reset --hard 版本號 : 重置倉庫區和暫存區和工做區。 git reset 版本號 : 效果與--mixed一致
git reset
命令後,版本會回退,使用git log
只能看到當前版本以前的信息。使用git reflog
能夠查看全部的版本信息在倉庫中,有些文件是不想被git管理的,好比數據的配置密碼、寫代碼的一些思路等。git能夠經過配置從而達到忽視掉一些文件,這樣這些文件就能夠不用提交了。
.gitignore
的文件,文件名是固定的。.gitignore
中# 忽視idea.txt文件 idea.txt # 忽視.gitignore文件 .gitignore # 忽視css下的index.js文件 css/index.js # 忽視css下的全部的js文件 css/*.js # 忽視css下的全部文件 css/*.* # 忽視css文件夾 css
分支就是科幻電影裏面的平行宇宙,當你正在電腦前努力學習Git的時候,另外一個你正在另外一個平行宇宙裏努力學習SVN。
若是兩個平行宇宙互不干擾,那對如今的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了Git又學會了SVN!
有了分支,你就能夠建立一個屬於本身的分支,別人看不到,也不影響別人,你在本身的分支上工做,提交到本身的分支上,等到功能開發完畢,一次性的合併到原來的分支。這樣既安全,又不影響他人工做。
git branch 分支名稱
建立分支,分支中的代碼,在建立時與當前分支的內容徹底相同。master
的主分支。git branch dev
,建立了一個叫作dev的分支git branch
能夠查看全部的分支,*
HEAD
,永遠會指向當前分支git checkout 分支名稱
切換分支 HEAD指針指向了另外一個分支git checkout -b 分支名稱
建立並切換分支git branch -d 分支名稱
能夠刪除分支master
分支是能夠刪除的,可是不推薦那麼作。git merge 分支名稱
將其餘分支的內容合併到當前分支。master
分支中執行git merge dev
將dev
分支中的代碼合併到master
分支做用:克隆遠程倉庫的代碼到本地
git clone [遠程倉庫地址]
git clone git@github.com:feitianlove/JDM.git
git克隆默認會使用遠程倉庫的項目名字,也能夠本身指定。須要是使用如下命令:
git clone [遠程倉庫地址] [本地項目名]
做用:將本地倉庫中代碼提交到遠程倉庫
git push 倉庫地址 master
在代碼提交到遠程倉庫
例子:git push git@github.com:feitianlove/JDM.git master
若是第一次使用,須要填寫gitee的用戶名和密碼
git push <遠程主機名> <本地分支名>:<遠程分支名> #若遠程是空倉庫,推算是本地倉庫不能爲空
做用:將遠程的代碼下載到本地
一般在push前,須要先pull一次。
git pull
將遠程主機的某個分支的更新取回,並與本地指定的分支合併,完整格式可表示爲:
$ git pull <遠程主機名> <遠程分支名>:<本地分支名>
git remote 不帶參數,列出已經存在的遠程分支 git remote add url 添加一個遠程倉庫
#在github建立好倉庫後,使用下面的: #給當前倉庫添加一個遠程倉庫 git remote add origin 你的遠程倉庫連接 #提交到遠程倉庫 git push -u origin master
git支持多種數據傳輸協議:
https://github.com/feitianlove/JDM.git
須要輸入用戶名和密碼git@github.com:feitianlove/JDM.git
能夠配置免密碼登陸每次push或者pull代碼,若是使用https協議,那麼都須要輸入用戶名和密碼進行身份的確認,很是麻煩。
gitee爲了帳戶的安全,須要對每一次push請求都要驗證用戶的身份,只有合法的用戶才能夠push
注意:這些命令須要在bash中敲
1 建立SSH Key:ssh-keygen -t rsa
2 在文件路徑 /Users/用戶名/.ssh
文件夾
3 文件夾中有兩個文件:
id_rsa
id_rsa.pub
4 在 gitee -> 設置-> SSH 公鑰
頁面中,新建立SSH key
5 粘貼 公鑰 id_rsa.pub
內容到對應文本框中
5 在github中新建倉庫或者使用如今倉庫,拿到git@github.com:用戶名/倉庫名.git
6 此後,再次SSH方式與github「通訊」,不用輸入密碼確認身份了
ssh-keygen -t rsa 運行後 每臺電腦都會生成本身的公鑰和私鑰
非對稱加密:
非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。 非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把做爲公用密鑰向其它方公開;獲得該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用本身保存的另外一把專用密鑰對加密後的信息進行解密。