git版本控制器輕易上手

一、git簡介

git的最新版本是2.0.2。推薦在Linux系統下使用命令行操作。git --version可查看當前的git的版本。

git與SVN,CVS等版本控制器相比的優點是不用登錄服務器,即在離線狀態下也可以使用git。

資源:http://gitref.org/


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)

  1. 初始化

git init (生成隱藏的.git文件夾,可用ls -A 查看)

2.克隆Github網站上的項目

git clone https://github.com/pythonhackers/pythonhackers.git

(會在當前目錄下生成pythonhackers文件夾)


四、git常用命令

wKiom1RWMvKg_u8NAAPo5AP95ro347.jpg如上圖:WD是working directory的簡稱,stage&history。我們的目標就是將在WD編輯的code.py同步到history。stage是history和WD的中間層。

  1. 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忽略掉帶有~的文件,即一些備份文件。 

  1. git add code.py (WD -> stage)    Undo:git checkout code.py (stage ->wd)

  2. git commit -m 'update' (stage ->history)   Undo:git reset code.py (history ->stage)

  3. git commit -am 'second update' ( WD -> history)   Undo:git checkout HEAD code.py (history -> WD)


  1. git diff (查看stage & WD的代碼差別)

  2. git diff -staged (查看history & stage的代碼差別)

  3. gif diff HEAD (查看history & WD的代碼差別)

Notice:git diff --stat可輸出簡要的diff信息。


移除文件和更改文件名

注意:git不認文件名,只認文件內容。即使文件更名,若內容一樣,則認爲不變。

  1. git rm old.py

  2. git rm --cached code.py (保留WD的code.py,刪除stage中的code.py)

  3. 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分支下編碼,因爲你還沒有十足的把握。這個時候你可以:

  1. git branch tryidea

  2. 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 

兩種類型:

  1. Fast-forward:只對tryidea分支的內容作了修改。

  2. 3-way merge:對master和tryidea都作了修改。


附上兩張COMMIT對象的邏輯圖:

wKioL1RWPKrgeXVhAAO1YpiQsyo817.jpg

wKiom1RWPFbC53HlAAPcXOktk-A170.jpg

完。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章