天天看點

git基本概念、基本指令、與SVN對比

基本概念:

(1)工作區:電腦可以看到的目錄。

(2)暫存區:stage(index),一般存放在 ".git目錄下" 下的index檔案(.git/index)中,是以我們把暫存區有時也叫作索引(index)。

(3)版本庫:工作區有一個隐藏目錄.git,這個不算工作區,而是Git的版本庫。

Index:暫存區(.git/index)             HEAD:指向master分支的一個”遊标”

Objects: git的對象庫(.git/object  含建立的各種對象及内容)

Master:master分支所代表的目錄樹。

Git:儲存不同時刻的檔案快照。

  Git分支:本質僅僅是指向送出對象的可變指針。

(1)git add指令:暫存區的目錄樹被更新,工作區修改(增加)的檔案内容被寫入到對象庫中新對象中,對象ID被記錄在暫存區檔案索引中。

(2)git commit 指令:暫存區目錄樹寫到對象庫,master分支更新。(指向的目錄書就是送出時暫存區的目錄樹)。

(3)git reset HEAD指令:暫存區目錄樹被master分支指向的目錄樹所替換。  

(4)git rm --cached  <file>指令:直接從暫存區删除指定檔案,工作區不改變。

(5)git checkout  . 或git checkout -- <file>指令:用暫存區全部或指定檔案替換工作區檔案。(危險:清除工作區未添加到暫存區的改動)

      git checkout 也可切換工作空間。

(6)git checkout HEAD . 或 git check out HEAD <file> 指令:會用HEAD指向的master分支中全部或部分檔案替換暫存區和工作區中的檔案。(危險:會清除工作區及暫存區未送出的改動)。

(7) git init 初始化版本庫,目前檔案夾下初始化一個倉庫,此時檔案裡會到一個.git的隐藏檔案夾(将目前目錄變為倉庫)

(8)git pull :将遠端庫資料更新至本地

(9)git push origin master:将本地庫送出至遠端庫。

基本指令

(1)配置:

配置使用者名:git config --global user.name "你的名字"

配置e-mail:git config --global user.email "你的郵箱@xx.com"

(2)與添加有關的:

将目前目錄變為倉庫:git init

将檔案添加到暫存區:git add 檔案名 [可選:另一個檔案名]

将暫存區送出到倉庫:git commit –m "描述"

(3)與查詢有關的:

查詢倉庫狀态:git status

比較檔案差異(請在git add之前使用):git diff 檔案名

檢視倉庫曆史記錄(詳細):git log

檢視倉庫曆史記錄(單行):git log --pretty=online 或 git log --online

檢視所有版本的commit ID:git reflog

(4)與撤銷有關的:

撤銷工作區的修改:git checkout -- 檔案名

撤銷暫存區的修改:git reset HEAD 檔案名

回退到曆史版本:git reset --hard 該版本ID

回退到上個版本:git reset --hard HEAD^

(5)與标簽有關的:

為目前版本打标簽:git tag 标簽名

為曆史版本打标簽:git tag 标簽名 該版本ID

指定标簽說明:git tag –a 标簽名 –m "标簽說明" [可選:版本ID]

檢視所有标簽:git tag

檢視某一标簽:git show 标簽名

删除某一标簽:git tag –d 标簽名

(6)與GitHub有關的:

先有本地庫,後有遠端庫,将本地庫push到遠端庫

關聯本地倉庫和GitHub庫:git remote add origin 網站上的倉庫位址

第一次将本地倉庫推送到GitHub上:git push –u origin master

先有遠端庫,後有本地庫,從遠端庫clone到本地庫

從遠端庫克隆到本地:git clone 網站上的倉庫位址

網站位址可以選擇HTTPS協定(https://github.com...)、SSH協定([email protected]...)。

如果選擇SSH協定,必須将Ubuntu的公鑰添加到GitHub上。見下一步

SSH Key

生成SSH Key:ssh-keygen –t rsa –C "你的郵箱@xx.com"

生成Key時彈出選項,回車選擇預設即可。

Key儲存位置:/root/.ssh

登陸GitHub,建立new SSH key,其内容為/root/.ssh/id_rsa.pub中文本

已經有了本地庫和遠端庫,二者實作同步

Git與Svn差別?

(1)Git為分布式,且内容按中繼資料方式存儲,且沒有全局版本号,且内容完整性優.(使用雜湊演算法磁盤故障時,可降低對版本庫破壞)。

(2)Svn為非分布式,内容按檔案存儲,有明确的版本号。

參考網站:

(1)http://blog.csdn.net/tomatozaitian/article/details/73515849

(2)http://www.runoob.com/git/git-workspace-index-repo.html

基礎指令:

git --version  檢視git的版本資訊

git config --global user.name  擷取目前使用者的登入名。

git config --global user.email  //擷取目前登入使用者的郵箱

登入git (設定git使用者資訊)

git config --global user.name ‘設定英文使用者名’

git config --global user.email ‘設定的Email’

初始化git倉庫

git  init  目前檔案夾下初始化一個倉庫,此時檔案裡會到一個.git的隐藏檔案夾(将目前目錄變為倉庫)

git commit -m ‘備注資訊’ 增加到版本庫

git log         檢視倉庫曆史記錄(詳細 )

git status      檢視倉庫狀态

git rm in.txt --cached  删除暫存區指定檔案

git reflog      檢視版本的送出ID

git reset       取消暫存

git pull        從遠端庫擷取,并合并到本地分支

與GitHub有關的:

  關聯本地倉庫和GitHub庫:git remote add origin 網站上的倉庫位址。

第一次将本地倉庫推送到GitHub上:git push –u origin master。

從遠端庫克隆到本地:git clone 網站上的倉庫位址。

比較差異

比較的是暫存區和工作區的差異

git diff

比較的是暫存區和曆史區的差異

git diff --cached

比較的是曆史區和工作區的差異(修改)

git diff master

合并分支: