Git是一個分佈式的版本控制系統,github可以用於管理項目版本控制。
msysgit是Windows版的Git,從http://msysgit.github.io/下載,然後按默認選項安裝即可。
工作原理
在開始正式嘗試使用之前,先簡單看一下GIT的工作原理:
、
在本地GIT倉庫當中,實際分爲工作區和版本庫。簡單來說:
- 工作區就是你存放工作文件的目錄。
- 而當執行git init創建本地git倉庫之後,隱藏的“.git”目錄下就是版本庫。
- 版本庫當中有一個被稱爲“stage”或者“index”的暫存區。
- 當我們申請創建倉庫之後,git會爲我們創建版本庫中的第一個默認的分支“master”,既主分支。
- 以及指向當前所使用分支的一個指針“HEAD”。
- git add將改動的文件提交到了暫存區。
- git commit將提交到暫存區存放的改動文件,一次性提交到我們的倉庫分支上。
常用命令介紹
瞭解了基本原理,我們來看一下實際工作中最常用到的一些命令:
1、向git表明身份:
git config --global user.name "Your Name"
git config --global user.email "Your Email"
注:“global”參數代表當前機器上所有的GIT倉庫都會使用這個配置。
2、將普通目錄設置成GIT倉庫:
git init
3、提交文件到GIT倉庫:
git add 文件路徑
git commit -m “提交說明”
4、查看GIT倉庫中的內容的改動狀態:
git status
5、如果有倉庫狀態有所改變化,查看變化的具體情況:
git diff 文件名
6、查看倉庫中的歷史“commit”記錄:
git log 或 git log --pretty==oneline
7、版本回退
git reset --hard HEAD^
git reset --hard 版本號
注:
- HEAD用於表示當前版本,^表示上一版本,^^則表示上上個版本,而例如100個版本之前,可以寫作HEAD~100.
- GIT每次通過“commit”執行提交時,會生成一個對應的通過SHA1計算出的“commit id”,也可以通過此來更改倉庫的當前版本。
8、查看“未來”的“commit id”:
git reflog
注:昨天你GIT倉庫回退到了某個版本,但今天打開電腦你重新考慮後還是應該換回昨天回退之前的版本。這個時候,通過“git log”命令已經無法得到該版本的“commit id”了,因爲該版本的提交位於你回退的版本之後,你無法通過歷史記錄查詢到該版本的id。這是reflog能夠幫你解決。
9、用版本庫中的版本替換工作區中的版本:
git checkout -- 文件名
注:該命令使用可以分爲兩種情況:
一種是文件自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是文件已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一此commmit或add時的狀態。
10、撤銷暫存區的修改內容(既撤銷掉通過“git add”提交過的內容):
git reset HEAD 文件名
注:由此可以發現,“git reset”不僅可以回退版本,還可以撤銷暫存區的改動。
11、刪除文件:
git rm 文件名
12、添加遠程倉庫:
git remote add 遠程倉庫鏈接
13、推送改動到遠程倉庫:
git push origin master
14、從遠程倉庫獲取改動內容
git pull origin master
注:
第一次提交時,可以使用git push -u origin master。之所以這樣做是因爲:
我們使用git push命令,實際上是把本地版本庫中的master分支的內容提交到遠程庫。
加上“-u”參數,則代表不但會把本地master的最新內容推送到遠程庫新的master分支,還會將兩個分支聯繫起來。
14、克隆遠程倉庫的內容到本地倉庫:
git clone 遠程庫鏈接
模擬場景運用
瞭解了這麼多GIT的常用命令之後,我們來模擬一些場景來聯繫一下真實的運用。使用GIT的最通常都的目的都是:多個人協同完成一項工作內容!
那麼假設我們現在有如下情況:你和小明約好一起寫一篇文章,你負責文章的上半部分,小明負責文章的下半部分。
於是,首先你和小明一起在github上創建了一個共同的遠程倉庫。假設,遠程倉庫的地址爲:[email protected]:meAndxiaoming/article.git.
現在,遠程庫建立好了,你和小明都得到了遠程倉庫的地址,負責文章上半部分編寫的你決定率先開始工作:
1、首先你會做好的你git配置,向git表明自己的身份,打開git命令行工具,輸入:
- git config --global user.name "me"
- git config --global user.email "[email protected]"
2、完成git的初始你在自己的電腦上建立了一個文件夾“MyArticleRepertory”,用於存放文章。
3、此時建立的文件夾“MyArticleRepertory”只是一個在你的電腦上用於存放文檔的目錄,它還和git沒有產生聯繫。爲此,我們決定先在該目錄下建立我們自己的本地GIT倉庫,於是繼續輸入命令:
- git init
- git addMyArticle.txt
- git commit -m "第一次編寫工作存檔"
- git reset --hard HEAD^
- git checkout --MyArticle.txt
- git reset HEADMyArticle.txt (首先,將暫存區的改動撤銷)
- git checkout -- MyArticle.txt(接着,將版本庫裏的內容覆蓋掉我們工作區的內容,既撤銷我們這次在工作區做的最新改動)
- git reset --hard HEAD^(當你執行完了這麼多操作,實際也就是完成了一次版本提交了,所以想要撤銷改動,實際就是做版本回退的工作了)
- git rm 牢騷.txt.
- git commit -m "發牢騷是我不對"
8、在你情緒最低落的時候,你爆發了,我尼瑪不幹了,隨後你刪除了MyArticle.txt。當你冷靜下來,工作還是要繼續,但是用於保存文章的MyArticle.txt已經被你刪掉了。別怕,這是使用版本庫的好處就體現了,你可以找回它,還記得checkout命令嗎?
- git checkout --MyArticle.txt
- git add MyArticle.txt
- git commit -m “上半部分成功完成,小明快接着寫下半部分吧!”
- git remote add origin [email protected]:meAndxiaoming/article.git (首先,你當然需要將遠程庫添加你的本地庫來)
- git push -u origin master (將我們本地倉庫的master分支與遠程庫的master分支綁定,並將本地分支上的內容全部推送到遠程分支上。此時,我們的文章,實際就已經存放到遠程倉庫了)。
- git log
11、終於有一天,小明通過“git log”命令查看到了一次提交,並且發現註釋爲“上半部分成功完成,小明快接着寫下半部分吧!”。小明很開心,馬上着手將存放到遠程庫的上半部分克隆到本地倉庫:
- git clone [email protected]:meAndxiaoming/article.git
12、隨後小明完成了下半部分的編寫工作,將文章提交到了遠程庫,至此,你們的協同工作也就完成了。而假設你們的文章發表後,反響不錯。於是你們決定寫第二部。這個時候,你們中間如果有人想要從遠程庫獲取最新改動,由於此時你們在自己電腦上已經有相關聯的本地庫了,就不必再使用克隆,只需要將遠程庫的最新改動“拉”下來就行了:
- git pull origin master