集中式版本管理(subversion
)和分散式版本管理(git
)的差異
- 集中式版本管理主要以檔案變更列表的方式儲存資訊
- 這類系統(
cvs
、subversion
、perforce
、bazaar
等等)儲存的資訊是一組基本檔案和每個檔案隨時間逐步累積的差異
- 分散式版本管理系統在儲存資料方面, 猶如對小型系統做一次快照
- 每次提交更新時候, 對當時的全部檔案製作一個快照並儲存快照的索引
- 如果檔案沒有修改, 則並不會重新儲存該檔案, 而是隻保留一個連結指向之前儲存的檔案
關於git
的三種狀態
- 已修改, 表示修改了當前版本的檔案, 但是還未儲存的資料庫中
- 已暫存, 對當前版本做了標記, 使之包含在下次的提交中
- 已提交, 表示資料已安全儲存到本地資料庫中
基本的git
工作流程
- 在
.gitignore
中可以新增需要忽略跟蹤的檔案- 可以使用
/
開頭來防止遞迴, 使用/
結尾來指定目錄 - 支援
global
模式(簡化的正規表示式),*
匹配零個或者多個任意字元,[abc]
匹配其中一個,?
只匹配一個任意字串,[0-9]
表示匹配0
到9
之間的任意數字,**
表示匹配任意目錄
- 可以使用
git status
檢查當前檔案狀態git status -s
狀態概要預覽git status --short
同上
git add
開始跟蹤新檔案,或者把已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等git diff
檢視已暫存和未暫存的修改, 此時比較的是工作目錄與暫存區之間的差異git diff --cached
或者git diff --staged
檢視已暫存的下次提交裡邊的內容
git commit -m
加上簡短提交資訊提交git commit -a -m
跳過暫存, 將所有跟蹤檔案暫存起來一併提交git commit --amend
提交當前暫存區所有檔案, 合併至上次的提交中
git rm
從暫存區中移除檔案(不再跟蹤), 本地檔案也會刪除git rm --cached
從暫存區中移除, 但是檔案仍保留在本地目錄中, 可使用global
模式, 例如git rm log/\*.log
git mv
移動檔案或者重新命名git log
檢視提交日誌git log -p -2
顯示最近兩次提交的內容差異git log --stat
顯示每次提交的簡略統計資訊
git reset HEAD file
取消暫存檔案git checkout -- file
撤銷檔案的修改, 此時對改檔案所有的修改都會消失, 本質上是拷貝了另一個檔案來覆蓋它git remote
檢視遠端倉庫git remote -v
檢視遠端倉庫已經對應的url
git remote show remote-name
檢視遠端倉庫詳細資訊
git remote add remote-name url
新增遠端倉庫git fetch remote-name
從遠端倉庫中拉取當前還沒有的資料, 執行完畢後將會有遠端倉庫中所有的分支和引用, 以備合併和檢視git push remote-name branch-name
推送到遠端倉庫git remote rename remote-name
修改遠端倉庫名git remote rm remote-name
刪除遠端倉庫git tag
列出標籤git tag -l version
列出指定版本的標籤
git tag -a version -m message
建立一個附註標籤, 附註標籤是儲存在git
資料庫中的一個完整物件, 它包含打標籤者的名字, 郵件, 日期以及標籤資訊git tag version
建立一個輕量標籤, 輕量標籤本質上是將校驗和儲存到一個檔案中, 並沒有儲存其它任何資訊git tag -a version 部分檢驗和
後期補標籤git push remote-name tag-name
推送標籤到遠端,git push
本身並不會傳送標籤到遠端git push remote-name --tags
推送所有標籤到遠端git checkout -b branch-name tag-name
在特定標籤上新建一個分支, 相當於檢出標籤