一、git簡介
git的最新版本是2.0.2。推薦在Linux系統下使用命令行操作。git --version可查看當前的git的版本。
git與SVN,CVS等版本控制器相比的優點是不用登錄服務器,即在離線狀態下也可以使用git。
git與GitHub:
git是一種版本控制系統。跟svn、cvs是同級的概念。 github是一個網站,給用戶提供git服務。這樣你就不用自己部署git系統,直接用註冊個賬號,用他們提供的git服務就可以。
二、安裝和配置
安裝:sudo apt-get install git
配置:兩種方式
1.命令行
git config --global user.name=yourname
git config --global user.email=youremail
git config --global color.ui=true
2.編輯~/.gitconfig 文件
git config --list可查看配置內容
三、創建repository(簡稱repo)
初始化
git init (生成隱藏的.git文件夾,可用ls -A 查看)
2.克隆Github網站上的項目
git clone https://github.com/pythonhackers/pythonhackers.git
(會在當前目錄下生成pythonhackers文件夾)
四、git常用命令
如上圖:WD是working directory的簡稱,stage&history。我們的目標就是將在WD編輯的code.py同步到history。stage是history和WD的中間層。
git status [-s]
執行git status -s命令後會生成:
例如:A test1.py
M test2.py
出現A列標誌說明stage和history中的test1.py版本不一致,出現M列標誌說明WD和stage的test2.py版本不一致。
執行echo '*~' >.gitignore 可使git忽略掉帶有~的文件,即一些備份文件。
git add code.py (WD -> stage) Undo:git checkout code.py (stage ->wd)
git commit -m 'update' (stage ->history) Undo:git reset code.py (history ->stage)
git commit -am 'second update' ( WD -> history) Undo:git checkout HEAD code.py (history -> WD)
git diff (查看stage & WD的代碼差別)
git diff -staged (查看history & stage的代碼差別)
gif diff HEAD (查看history & WD的代碼差別)
Notice:git diff --stat可輸出簡要的diff信息。
移除文件和更改文件名
注意:git不認文件名,只認文件內容。即使文件更名,若內容一樣,則認爲不變。
git rm old.py
git rm --cached code.py (保留WD的code.py,刪除stage中的code.py)
git mv old.txt old.doc(若內容一樣,則還是認爲不變)
即等同於以下命令:
git rm --cached old.txt
mv old.txt old.doc
git add old.doc
Notice:git會自動推斷文件內容是否改變,不會將文件名和文件內容綁定。
情境:當你正在修改code.py代碼時,有人過來告訴你你之前的code.py有個Bug,怎麼辦?我已經正在修改code.py了,但是這些代碼還沒有進行測試,需要回到原來的code.py進行更改重新上線。這個時候,你可以用到
git stash (收拾一下當前桌面,回退到原來的狀態,等修復後,再把這個桌面拿出來繼續code)
git stash list
git stash pop
上面我們提到的history其實是一個commit對象,可通過一段40字節的哈希碼訪問。
git log (--oneline) 輸出repository的日誌。
強大的命令:git cat-file [-t,-p] [哈希碼或對象]
-t 輸出類型:有commit,tree,blog類型
-p 輸出文件內容。
如git cat-file -t HEAD (HEAD~*) (*是一個正整數)
git rev-parse HEAD 輸出HEAD的哈希40字節碼。
git rev-parse HEAD/master (當只有一個branch的時候,HEAD是等價於master的)
另外還有HEAD~4^{tree},HEAD~4:code.py (路徑從根目錄出發,即.git所在的目錄)
cat-file -p 等於 show
上述內容均屬於tree-ish部分。
創建另一個分支:如果你有一個新的想法,但你不想在當前的master分支下編碼,因爲你還沒有十足的把握。這個時候你可以:
git branch tryidea
git branch 可查看當前項目的所有分支:如
* master
tryidea
3.通過git checkout tryidea切換到tryidea分支:再運行git branch:會有:
master
* tryidea
也可在創建時直接git branch -b tryidea,即新建的同時切換到tryidea。
刪除分支:git branch -d tryidea (前提是你已經把tryidea分支的內容merge到master分支下了)
git merge tryidea
兩種類型:
Fast-forward:只對tryidea分支的內容作了修改。
3-way merge:對master和tryidea都作了修改。
附上兩張COMMIT對象的邏輯圖:
完。