1、版本控制(vcs):記錄一個或若干個文件內容變化,以便將來查閱特定版本修訂情況的系統。
1)本地版本控制系統:
1.1 直接複製整個項目目錄,然後加上時間戳。
1.2 通過基礎文件和增量(補丁)計算每個版本。
2)集中化版本控制系統(svn):
2.1 不同系統上協同工作。
2.2 中央倉庫單點故障。
3)分佈式版本控制系統(git):
3.1 客戶端並不只是提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來。
3.2 不存在單點故障問題。
2、git起源於linux內核開源提交。
2)svn 關注文件增量,git 關注文件整體。
1.1 爲了提高效率,對於沒有修改的文件,git只保存一個上次快照的鏈接(例如軟鏈)。
1.2 幾乎所有操作都是本地執行。
1.3 git通過計算文件內容或者目錄結構的sha1值來判定文件是否有修改。
3、git clone
git clone --bare
git config --global
git init
工作目錄,緩存區,git倉庫。
.git目錄
git add
git commit -m "some message"
1)在工作目錄初始化倉庫
2)從現有倉庫克隆
git status 查看文件狀態
.gitignore文件
git diff 修改之後還沒暫存的詳情。
git diff --cached 暫存的和上次提交的差異。
git commit -a -m "some message" :add 和 commit一起搞了。
git rm之後在commit就可以不再跟蹤了。
git rm --cached 僅刪除緩存區裏的文件,工作區的文件沒有刪除。
git mv重命名文件。
git log 查看提交歷史。
git log -p
git log --stat
gitk : git log 的圖形化工具。
git commit --amend 重新提交。
git reset HEAD :反add。
git checkout -- : 放棄文件修改。
git remote :查看遠程倉庫。 -v列出詳情。
git remote add :添加遠程倉庫
git fetch :從遠程倉庫抓取數據到本地。
git pull :從遠程倉庫拉取數據到本地,並且自動合併。
git push origin master :克隆操作會自動默認使用master 和origin名字。
git remote show : 查看遠程倉庫信息。
git remote rm :移除遠程倉庫。
git tag :標籤。
在git中提交時,會保存一個提交(commit)對象,該對象包含一個指向暫存區內容快照的指針,包含本次提交的作者等相關附屬信息,包含零個或多個指向該提交對象的父對象指針:首次提交是沒有直接祖先的,普通提交有一個祖先,由兩個或多個分支合併產生的提交則有多個祖先。
快照被保存爲blob對象。
分支其實就是從某個提交對象往回看的歷史。
git branch :創建分支。
HEAD : 當前分支的別名。
git checkout :分支切換。
由於 Git 中的分支實際上僅是一個包含所指對象校驗和(40 個字符長度 SHA-1 字串)的文件,所以創建和銷燬一個分支就變得非常廉價。說白了,新建一個分支就是向一個文件寫入 41 個字節(外加一個換行符)那麼簡單,當然也就很快了。
git checkout -b :新建並切換到新分支。
git merge :分支合併。
git branch -d :刪除分支。
同一個文件的同一個部分,產生衝突。
任何包含未解決衝突的文件都會以未合併(unmerged)的狀態列出。
git branch -v :查看各個分支最後的提交對象。
*表示當前所在的分支。
git branch --merged :查看已經合併到當前分支的分支。(其實可以刪掉了)
git branch --no-merged :查看還未合併到當前分支的分支。
合併分支會自動生成一個新的提交對象。
直接從尾部開始的分支在合併時,會提示fast forward,即直接移動指針。
遠程倉庫名/分支名。
遠程分支無法修改。
自動合併是:兩個分支的最新提交對象已經共同祖先,三方合併。