一、時光機穿梭
1. 版本回退
git status命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài)。
git diff顧名思義就是查看difference。
提交修改和提交新文件是一樣的兩步,第一步是git add,第二步git commit。
每當(dāng)你覺得文件修改到一定程度的時候,就可以“保存一個快照”,這個快照在Git中被稱為commit。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復(fù),然后繼續(xù)工作,而不是把幾個月的工作成果全部丟失。
git log命令顯示從最近到最遠的提交日志。如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù)。
和SVN不一樣,Git的commit id不是1,2,3……遞增的數(shù)字,而是一個SHA1計算出來的一個非常大的數(shù)字,用十六進制表示,而且你看到的commit id和我的肯定不一樣,以你自己的為準。為什么commit id需要用這么一大串?dāng)?shù)字表示呢?因為Git是分布式的版本控制系統(tǒng),后面我們還要研究多人在同一個版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就沖突了。
Git必須知道當(dāng)前版本是哪個版本,在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD,上上一個版本就是HEAD,當(dāng)然往上100個版本寫100個比較容易數(shù)不過來,所以寫成HEAD~100。
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL
版本號沒必要寫全,前幾位就可以了,Git會自動去找。當(dāng)然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。
git reflog用來記錄你的每一次命令。
小結(jié)
HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
2. 工作區(qū)和暫存區(qū)
3. 管理修改
4. 撤銷修改
5. 刪除文件
二、遠程倉庫
1. 增加遠程庫
2. 從遠程庫克隆

三、Git 分支
Git鼓勵大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
解決沖突
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內(nèi)容。
分支策略
在實際開發(fā)中,我們應(yīng)該按照幾個基本原則進行分支管理:
首先,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個時候,比如1.0版本發(fā)布時,再把dev分支合并到master上,在master分支發(fā)布1.0版本;
你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
所以,團隊合作的分支看起來就像這樣:

Git還提供了一個stash功能,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:
工作現(xiàn)場還在,Git把stash內(nèi)容存在某個地方了,但是需要恢復(fù)一下,有兩個辦法:
一是用git stash apply恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來刪除;
另一種方式是用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪了:
參考:
Git教程: