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