title: 版本控制及git常用基本命令
date: 2015-12-04 11:40:04
tags: [git, version control, 版本控制]
(此文章適合聽說(shuō)過(guò)git盯滚,大概知道git是什么東東扇商,但是又不會(huì)git命令的童鞋閱讀。
時(shí)間充裕的童鞋可以到codecademy跟著教程一步步走)
Git是一個(gè)分布式的版本管理(Version Control)工具葵擎。
版本管理這個(gè)概念很多童鞋可能不是很清楚脑豹,但其實(shí)在代碼創(chuàng)作的過(guò)程中很可能已經(jīng)使用過(guò)了一些傳統(tǒng)的方法码撰,比如我初中高中的時(shí)候創(chuàng)作博客模板的時(shí)候谭期,對(duì)同一個(gè)模板想做一些不同的調(diào)整,同時(shí)又擔(dān)心調(diào)整后原來(lái)的功能啊顯示啊的會(huì)受到影響兆旬,那時(shí)候還不知道github之類的東東假抄,于是機(jī)智地
- 創(chuàng)建了很多文件夾來(lái)放不同的模板
- 不停的備份
- 如果調(diào)整后正常運(yùn)行和顯示,那就使用最新的版本
- 如果調(diào)整后不能正常運(yùn)行同時(shí)又找不出問(wèn)題所在丽猬,就是用備份的上一個(gè)版本來(lái)重新創(chuàng)作
以上對(duì)應(yīng)到版本控制系統(tǒng)分別是:
- 創(chuàng)建分支(branch)
- 提交代碼(commit)
- 合并分支(merge)
- 版本回滾(checkout)
關(guān)于git的概念及使用流程這里不詳細(xì)討論慨亲,暫時(shí)只討論一些最基本的常用的git命令
-
git init
初始化一個(gè)git倉(cāng)庫(kù),生成.git
隱藏文件 -
git status
查看git倉(cāng)庫(kù)的狀態(tài)宝鼓,將會(huì)返回當(dāng)前分支, 文件狀態(tài)等信息刑棵,可以使用-s
參數(shù)查看只有文件狀態(tài)的簡(jiǎn)潔版信息 -
git clone <repo location> <repo name>
將遠(yuǎn)程分支克隆到本地,<repo name>
參數(shù)可選愚铡,為本地repo命名蛉签,若省略,則本地repo與遠(yuǎn)程同名 -
git add <file name>
將文件變?yōu)閟taged狀態(tài)沥寥,也就是告訴git哪些新的文件和修改過(guò)的文件是之后要提交的碍舍;文件名支持正則表達(dá)式 -
git rm <file name>
將文件刪除同時(shí)告訴git從git倉(cāng)庫(kù)中刪除文件,可以使用--cached
參數(shù)實(shí)現(xiàn)只從git倉(cāng)庫(kù)中刪除而不刪除本地文件 -
git diff <file name>
查看git倉(cāng)庫(kù)文件與本地文件的區(qū)別 -
git commit -m "some comment"
將修改提交到git倉(cāng)庫(kù) -
git show HEAD
顯示HEAD版本的相關(guān)信息邑雅,包括author片橡,date,comment淮野,diff -
git log
查看提交記錄捧书,包括提交的時(shí)間、作者骤星、評(píng)論 -
git reset SHA
將本地git倉(cāng)庫(kù)回退到某個(gè)版本经瓷,其中SHA
為版本log中commit后的一長(zhǎng)串字符的前7位字符 -
git reset HEAD <file name>
將本地git倉(cāng)庫(kù)中的某個(gè)文件重置為git倉(cāng)庫(kù)的HEAD版本 -
git checkout HEAD
使用git倉(cāng)庫(kù)中的文件覆蓋當(dāng)前的整個(gè)working copy,可以在修改了某些文件但想舍棄這些修改的時(shí)候使用這個(gè)命令
需要注意
reset
是針對(duì)本地的git倉(cāng)庫(kù)洞难,也就是你每次commit后舆吮,文件就會(huì)保存到的倉(cāng)庫(kù)。
而checkout
是針對(duì)本地的工作副本,也就是你直接編輯的那些文件色冀,會(huì)被overwrite
-
git branch
查看分支信息潭袱,使用-r
參數(shù)查看遠(yuǎn)程分支信息 -
git branch <branch name>
添加新的分支 -
git branch -d <branch name>
刪除分支 -
git checkout <branch name>
切換分支,可以使用-b
參數(shù)锋恬,創(chuàng)建新分支并切換到新分支 -
git fetch
獲取遠(yuǎn)程origin/master分支最新版本敌卓,需要手動(dòng)與本地文件merge -
git pull
獲取遠(yuǎn)程的最新版本并與本地merge
需要注意
git fetch
與git pull
的不同,通常如果本地文件有改動(dòng)伶氢,則應(yīng)該先f(wàn)etch在git merge origin/master
-
git stash
將本地的工作副本暫時(shí)存起來(lái) -
git pop
將存起來(lái)的工作副本放出來(lái)…
git stash
和git pop
通常在git pull
或git merge
的時(shí)候如果有沖突(conflict)的時(shí)候使用,pop
之后有沖突的工作副本會(huì)變成如下的樣子瘪吏,沖突的resolve就是選取最終的內(nèi)容癣防,然后刪除多余的內(nèi)容,包括<<< ===>>>這些行也要?jiǎng)h除掌眠,讓代碼看起來(lái)和正常的代碼一樣蕾盯。
//git pop之后的沖突文件看起來(lái)長(zhǎng)這樣:
<<<<<<< their code
var a = 123;
=======
var a = 456;
>>>>>>> my code
//沖突解決后,看起來(lái)應(yīng)該長(zhǎng)這樣:
var a = 123;
-
git merge <branch name>
合并分支蓝丙,將指定分支與當(dāng)前分支合并
origin/master
分支為遠(yuǎn)程主分支
-
git push origin <branch name>
把分支推送到遠(yuǎn)程