git是乙個分布式版本控制系統,它的優越性在於跟蹤並管理的是修改,而非檔案;同時是分布式的,在本地工作完全不需要考慮遠端庫的存在,不聯網也可以正常工作,當有網路的時候,再把本地提交推送一下就完成了同步。比集中式版本控制系統如svn方便了許多。
[1]建目錄
(a)選擇乙個合適的地方,建立乙個空目錄:$ mkdir mygit
(b)通過git init命令把這個目錄變成git可以管理的倉庫:$ git init
瞬間git就把倉庫建好了,而且告訴你是乙個空的倉庫(empty git repository),當前目錄下多了乙個.git的隱藏目錄,這個目錄是git來跟蹤管理版本庫的。
[2]提交檔案(必須放在建立的倉庫目錄或子目錄下)
(a)git add 把檔案新增到倉庫:$ git add readme.txt
(b)git commit把檔案提交到倉庫:$ git commit -m "wrote a readme file"
可反覆多次使用,新增多個檔案;一次提交。
原理:git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有git為我們自動建立的第乙個分支master,以及指向master的乙個指標叫head。如圖:
git add命令實際上就是把要提交的所有修改放到暫存區(stage),然後,執行git commit就可以一次性把暫存區的所有修改提交到分支。
$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works
2 files changed, 675 insertions(+)
create mode 100644 license
一旦提交後,如果你又沒有對工作區做任何修改,那麼工作區就是「乾淨」的:
$ git status
# on branch master
nothing to commit (working directory clean)
[3]撤消修改
git中每當你覺得檔案修改到一定程度的時候,就可以「儲存乙個快照」,這個快照在git中被稱為commit。一旦你把檔案改亂了,或者誤刪了檔案,還可以從最近的乙個commit恢復,然後繼續工作
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。注意--後有一空格
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時
(a)用命令git reset head file,就回到了場景1
(b)按場景1操作。
場景3:從暫存區提交到了版本庫,但還沒有把自己的本地版本庫推送到遠端,版本回退
(a)檢視歷史記錄:$ git log,顯示從最近到最遠的提交日誌
(b)加引數: $ git log --pretty=oneline 只顯示版本號和說明
說明:版本號是乙個sha1計算出來的十六進製制數。因為git是分布式的版本控制系統,後面我們還要研究多人在同乙個版本庫里工作,為防止衝突,不用1,2,3……作為版本號。
在git中,用head表示當前版本,也就是最新的提交,上乙個版本就是head^,上上乙個版本就是head^^,往上第n個版本寫成head~n
(c)回退到上乙個 $ git reset --hard head^
(d)撤消回退/或者跳轉到其它歷史版本 $ git reset --hard 版本號
版本號只顯示前幾個就可以
要重返未來,用git reflog檢視命令歷史,以便確定要回到未來的哪個版本
原理:git的版本回退速度非常快,因為git在內部有個指向當前版本的head指標,當你回退版本的時候,git僅僅是把head從指向上乙個版本:
[4]刪除檔案
當檔案管理器中的檔案刪除後,工作區和版本庫不一致
(a)從版本庫中刪除該檔案 $ git rm file
(b)把工作區誤刪的檔案恢復到最新版本$ git checkout -- file
git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以「一鍵還原」。但只能恢復檔案到最新版本,你會丟失最近一次提交後你修改的內容
[5]遠端倉庫
github是提供git倉庫託管服務的,所以,只要註冊乙個github賬號,就可以免費獲得git遠端倉庫。
由於本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,需設定:
第1步:建立ssh key。開啟shell(windows下開啟git bash),輸入
$ ssh-keygen -t rsa -c "[email protected]"
之後可在使用者主目錄裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是ssh key的秘鑰對,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第2步:登陸github,開啟「account settings」,「ssh keys」頁面:
然後,點「add ssh key」,填上任意title,在key文字框裡貼上id_rsa.pub檔案的內容:
點「add key」,你就應該看到已經新增的key:
原理:github需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而git支援ssh協議,所以,github只要知道了你的公鑰,就可以確認只有你自己才能推送。github允許你新增多個key。但在github上免費託管的git倉庫,不加密任何人可見。
解決方法一:用收費服務,讓github把公開的倉庫變成私有的。
方法二:搭乙個git伺服器,因為是你自己的git伺服器,所以別人也是看不見的。
[6]關聯遠端庫
關聯乙個遠端庫,$ git remote add origin git@server-name:path/repo-name.git;
關聯後,$ git push -u origin master第一次推送master分支的所有內容;
此後,每次本地提交後,用$ git push origin master推送最新修改;
[7]轉殖
要轉殖乙個倉庫,首先必須知道倉庫的位址,然後使用$ git clone 倉庫位址
git支援多種協議,包括https,但通過ssh支援的原生git協議速度最快。
使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http埠的公司內部就無法使用ssh協議而只能用https。
git 基本命令
man git man git commit man git pull man git merge git config global user.name yourname git config global user.email yourname example.com cd home git m...
Git 基本命令
git config global user.name xx git config global user.email x com 1.建立專案資料夾 mkdir myproject 2.進入專案資料夾 cd myproject 3.初始化專案 git init 4.建立 readme.md tou...
Git 基本命令
說明 以下所有操作命令 均在 git bash 下執行,即命令為linux風格 檔案 以 txt 為例 其中,建立某乙個倉庫,在某一具體路徑下 執行 git init即可 幫助命令 git help 建立 respository git init 刪除 respository rm rf git 建...