集中式版本管理(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
在特定標簽上新建一個分支, 相當于檢出標簽