小追兵專欄
一、簡介
svn的時代慢慢的走到向尾聲,git正在慢慢取代svn。
我也從svn換成Git作為版本控制軟件了。下面我們簡單的學習下Git的使用。
這里我們是當成一片學習筆記。適用于初學者。
什么是Git?Git是一款免費、開源的分布式版本控制系統。不論怎么形容,它就是用來做版本控制的。
什么是分布式:簡單粗暴的理解為分散的,分開的,每一個個體是單獨的,這些單獨個體也可組合為一個整體的大系統。
舉例來說:這里Git是分布式,就是每個用戶計算機都是一個版本控制庫,可以不依賴中央服務器。而相對svn就是集中式版本控制,每個計算機不能作為一個單獨的版本控制庫,只能依賴中央服務器。
這里盜用別人一張圖:
大神也對圖中的錯誤進行了如下更新:
1.更改了一個錯別字,git fetch操作的“單”=>“但”。由@leky指出。
2.reset --head更改為reset --hard。由@dtopn指出。
3.分支篇新增git rebase $other_branch操作。由@dtopn提出。
下面用到的git命令:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
cd gittest
touch README.txt
git add -A
git add --all
git add README.txt
git commit -m "readme.txt第一次提交"
git diff README.txt
git log
git log –pretty=oneline
簡寫為
git log --oneline
//由@lovexiaov提供的簡寫命令
git reset --hard HEAD^
git reset --hard HEAD~100
git reflog
git reset --hard c8dd*** 版本號
git checkout -- readme.txt
如果你都比較熟悉,可以不用接著往后看了。
這里我們以Mac電腦作為演示,Windows可以下載 msysgit,打開Git Bash,其他完全一樣。
二、配置標識
下來我們說說git的第一條命令:
在mac的 終端 下面輸入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git作為一個分布式版本管理系統,它需要每一個用戶的一個標識,上面填寫的"Your Name"
和"email@example.com"
就是我們自己的唯一標識。
--global
這個參數讓我們的標識在這臺電腦的所有位置都生效,如果我們需要對某個單獨的庫進行配置,也是可以的。
三、創建版本庫
1、如何管理我們的一個項目呢?假定我們需要管理的目錄是gittest文件夾,如圖:
2、在終端中,我們用cd gittest
命令進入我們的項目目錄gittest,如圖:
現在我們已經在gittest目錄下了,接下來,我們用如下命令創建版本庫:
git init
這時git會在這個目錄下創建一個.git
文件,這就是我們的版本庫。我們可以通過ls -a
命令查看.git
是否真的被創建。.git
是用來管理和跟蹤文件的庫,沒事不要對.git
進行手動刪除或修改,這樣會破壞版本控制的結構,導致版本庫被破壞,如圖已被創建:
現在我們創建一個README.txt文件假設為我們項目文件,把這個文件添加到我們的版本庫中。在這里我用touch README.txt
命令創建一個README.txt文件,把它作為我們的管理對象。如圖:
我們去文件夾中查看,文件已經創建,如圖:
現在把這個txt文件作為我們項目文件,添加到版本庫中進行管理。
命令:
git add --all
或者
git add -A
這里是把我們項目目錄gittest下面的所有文件添加到了Git的緩存區。
也可以單獨添加需要控制的文件:
git add README.txt
沒有任何提示,說明添加成功。
如圖:
命令:
git commit -m "readme.txt第一次提交"
這里我們將README.txt文件提交到了倉庫,如圖:
補充:這里可以看到,git還吧一個.DS_Store
的文件提交到了版本庫,.DS_Store
文件是mac系統的文件夾下的隱藏文件,這是因為我用的是git add --all
命令,所以把目錄下的所有文件都提交了。
我們看看還有什么文件沒有被提交,用git status
命令,如圖:
可以看到,已經沒有可
commit
的文件了。
可是我們現在對README.txt文件做出修改,我們添加了內容111……和222……如圖:
現在我們用git status
查看git的狀態,如圖:
git告訴我們,文件能容被修改,但沒有提交。
我們通過git diff README.txt
查看文件,如圖:
可以看到我們的README.txt添加了兩行新內容。
現在我們對修改后的文件進行提交,和前面一樣:
git add -A
git commit -m "第二次提交,添加了內容111和222"
之后我們用git status
看看git的狀態,還有什么沒有提交,如圖:
學會了這個,我們繼續修改README.txt文件內容,增加333……,并且提交,如圖:
三、版本回退
接下來,我們做版本回退,我們剛才增加了333……,可是發現不理想,或者有重大問題,舍棄不需要增加333……后的這個版本了,我們想退回222……那里。
我們現在可以使用命令 git log
查看提交的日志:如圖
可以看出,我們對一共提交了三次。亦可以看出提交的順序,
如果看著不爽,也可以用
git log –pretty=oneline
簡寫
git log --oneline
//由@lovexiaov提供的簡寫命令
結果如圖:
這樣有用寫信就顯示在一行了,前面紅色圈里的數字符號,是只版本號,后面箭頭指的是提交時寫的提交信息。
現在我們用下面命令:
git reset --hard HEAD^
是指:退回上一個版本,這里我們的上一個版本是只有兩行,第一行111……第二行是222……,第三行的333……還沒有添加。讓我們看看效果吧!如圖:
文件已經是下圖的樣子了:
回退之后,用git log
可以看到如下內容:
可以看到,333……已經不再了。一次類推,要回退上上個版本就是HEAD^^
,那上上上個版本就是HEAD^^^
,然后如果有100個版本,你不介意就一直接 ^
吧。當然也可以用更方便的方法了:
git reset --hard HEAD~100
回退100個版本。
我們還有一種回退方法,指定版本號回退。假定我現在又想退回添加333……的那個版本去,我們用git log
查看了,只能看到第一次,和第二次提交的內容,第三次的我們看不到,我們該怎么做呢?
git reflog
這樣我們如同看到了三個版本的版本號:
我們已經看到了我們第三次提交的版本號了:
git reset --hard c8ddd30
這里的“c8ddd30”是版本號,我們用git reflog
可以查看
現在查看下README.txt,發現文件中的內容有回到了三行。如圖:
·
五、工作區和暫存區的比較和理解
工作區:電腦上項目的目錄,比如目錄下testgit里的文件README.txt(.git隱藏目錄版本庫除外),還有之后在目錄中增加的文件,和子目錄都是工作區。
版本庫 (Repository) : 我們git init命令后,在gittest目錄下生成的.git就是版本庫。它不是工作區,.git里面存了很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動創建了第一個分支master,以及指向master的一個指針HEAD。
我們前面說過使用Git提交文件到版本庫有兩步:
第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區。
第二步:使用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支上。
現在我們做了下面操作:
我們在前面333……的基礎上有增加了一行444……,可是還沒等我們提交的時候,我們想放棄這次修改,不要增加的444……了。這里我們要進行撤銷操作:
1、手動刪除添加的444……內容。
2、版本回退到上一個版本。
git reset --hard HEAD^
3、放棄此次編輯,把工作區做的修改全部撤銷。
git checkout -- readme.txt
三個方法根據需要,和方便性,可以自行選擇。
注意:
命令git checkout -- readme.txt 中的 -- 很重要,如果沒有 -- 的話,那么命令變成創建分支了。
現在我們想刪除項目中的文件b.txt,項目中有些文件我們用不到了,我們需要刪除,以保證項目的感覺。
1、我直接在gittest文件目錄中把文件b.txt刪了,或者使用如上rm命令:rm b.txt
2、如果想把庫中的b.txt也刪除了,那我們只要commit已經刪除過b.txt的項目到庫中就好了。因為提交的項目里沒有b.txt,所以也就等等刪除了庫中的b.txt.
3、如果沒commit前,想回復剛才刪除的工作區中的b.txt,用將庫里的checout一份。
git checkout -- b.txt
·
·
遠程庫的學習筆記,會在下一篇中詳細說明。
最后:有需要Shadowsock翻墻賬號可以私聊。