基本概念:
(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
合并分支: