title: 版本控制及git常用基本命令
date: 2015-12-04 11:40:04
tags: [git, version control, 版本控制]
(此文章適合聽說過git,大概知道git是什么東東,但是又不會git命令的童鞋閱讀。
時間充裕的童鞋可以到codecademy跟著教程一步步走)
Git是一個分布式的版本管理(Version Control)工具。
版本管理這個概念很多童鞋可能不是很清楚,但其實在代碼創作的過程中很可能已經使用過了一些傳統的方法,比如我初中高中的時候創作博客模板的時候,對同一個模板想做一些不同的調整,同時又擔心調整后原來的功能啊顯示啊的會受到影響,那時候還不知道github之類的東東,于是機智地
- 創建了很多文件夾來放不同的模板
- 不停的備份
- 如果調整后正常運行和顯示,那就使用最新的版本
- 如果調整后不能正常運行同時又找不出問題所在,就是用備份的上一個版本來重新創作
以上對應到版本控制系統分別是:
- 創建分支(branch)
- 提交代碼(commit)
- 合并分支(merge)
- 版本回滾(checkout)
關于git的概念及使用流程這里不詳細討論,暫時只討論一些最基本的常用的git命令
-
git init
初始化一個git倉庫,生成.git
隱藏文件 -
git status
查看git倉庫的狀態,將會返回當前分支, 文件狀態等信息,可以使用-s
參數查看只有文件狀態的簡潔版信息 -
git clone <repo location> <repo name>
將遠程分支克隆到本地,<repo name>
參數可選,為本地repo命名,若省略,則本地repo與遠程同名 -
git add <file name>
將文件變為staged狀態,也就是告訴git哪些新的文件和修改過的文件是之后要提交的;文件名支持正則表達式 -
git rm <file name>
將文件刪除同時告訴git從git倉庫中刪除文件,可以使用--cached
參數實現只從git倉庫中刪除而不刪除本地文件 -
git diff <file name>
查看git倉庫文件與本地文件的區別 -
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
參數查看遠程分支信息 -
git branch <branch name>
添加新的分支 -
git branch -d <branch name>
刪除分支 -
git checkout <branch name>
切換分支,可以使用-b
參數,創建新分支并切換到新分支 -
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就是選取最終的內容,然后刪除多余的內容,包括<<< ===>>>這些行也要刪除,讓代碼看起來和正常的代碼一樣。
//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>
把分支推送到遠程