| ### git常用命令 |
| ~~~ |
| git pull --rebase |
| 從服務(wù)器獲得更新 |
|
|
| git status |
| 查看本地修改 |
|
|
| git add .git add xxx |
| 添加本地的修改 |
|
|
| git rm xxx |
| 刪除一個(gè)本地修改 |
|
|
| git commit |
| 提交本地修改,但沒(méi)有上傳到服務(wù)器,只是本地的記錄,git commit --amend,修改上個(gè)commit的log信息,已經(jīng)push到服務(wù)器的無(wú)效。 |
|
|
| git rebase -i |
| 如git rebase -i HEAD~3 ,修改或合并多個(gè)本地commit。 |
|
|
| git push |
| 把 本地的修改更新到服務(wù)器 |
|
|
| git log |
| 查看修改記錄 |
|
|
| git branch -av |
| 查看分支信息 |
|
|
| gitk |
| GUI的git log |
|
|
| git remote -v |
| 查看倉(cāng)儲(chǔ)路徑 |
| ~~~ |
|
|
| ### 為什么要扔掉svn? |
|
|
| 1. svn是必須在線(xiàn)用,沒(méi)辦法本地管理,不方便,本地也就能看看改動(dòng)啥了。 |
| 2. svn每個(gè)動(dòng)作都要生成版本,創(chuàng)建個(gè)文件夾也記錄,且版本記錄無(wú)法清除 |
| 3. 每個(gè)目錄下都有.svn,太亂了,git只有在根目錄有個(gè).git ,所有記錄都在這個(gè).git中 |
|
|
| 從多方面看,git更加靈活,svn是舊時(shí)代的產(chǎn)物,有些老的開(kāi)源項(xiàng)目還在用,但很多都開(kāi)始轉(zhuǎn)到git了。 |
|
|
| ### 基本概念 |
| commit, tree, blob |
| branch, tag, reflog |
| commit DAG |
| working directory, stage area, object database |
|
|
| 使用git,有兩個(gè)概念至關(guān)重要: DAG (有向無(wú)環(huán)圖) 和 stage area. 這兩個(gè)概念正是git的難學(xué)與強(qiáng)大之處。 |
| 只要你理解了這兩個(gè)概念,并圍繞這兩個(gè)概念來(lái)理解git的命令,你會(huì)發(fā)現(xiàn),其實(shí)git相當(dāng)簡(jiǎn)單。 |
|
|
| DAG: git的歷史是一個(gè)DAG,圖的每個(gè)節(jié)點(diǎn)代表一個(gè)commit, 而每次提交(git commit)都是在修改這個(gè)DAG. 而branch, tag僅僅是指向這個(gè)DAG的某個(gè)節(jié)點(diǎn)的一個(gè)指針(pointer, reference). |
|
|
|
|
|
|
| stage area: 介于working copy和object store之間的區(qū)域!眊it add”將數(shù)據(jù)臨時(shí)存于 stage area, “git commit”將 stage area的數(shù)據(jù)存儲(chǔ)到 object store |
|
|
|
|
|
|
|
|
| ### 實(shí)踐經(jīng)驗(yàn) |
|
|
| 和中心倉(cāng)儲(chǔ)同步時(shí),盡量使用 “git pull –rebase” 而不是 “git pull”,后者會(huì)導(dǎo)致merge,而盲目的merge會(huì)導(dǎo)致歷史很難看 |
| 提交的粒度應(yīng)該比較小,且是獨(dú)立的功能單元 |
|
|
| commit message的格式為 比較短的 標(biāo)題 + 空行 + 詳細(xì)描述 |
| commit message的編碼應(yīng)為utf8,若在git bash下提交,vim默認(rèn)配置下其編碼為gbk (:set fileencoding? 可查看編碼),所以請(qǐng)使用英文,禁止使用中文提交 |
|
|
| ### 高級(jí)用法 |
|
|
| git cherry-pick 3dfe |
| git revert 3dfe |
| git grep ‘foo’ |
| git log -p |
| git log -g master # reflog |
| git log –format=oneline |
| git shortlog origin/master.. |
| git rebase -i origin/master |
|
|
|
|