Git Tutorials & GitHub 快速入門(上)
幾個月以前想在GitHub托管一個項目,聽說非常好用,便一睹為快。殊不知在上面點了半天,也不知道個所以然,搜索了半天也沒有一個足夠清晰的教程。如果現在的你和我當時一樣confuse。希望當你閱讀完這篇文章的時候,至少在使用上沒有任何困難,并且也被Git的魅力吸引,漸漸喜歡上它,那我的目的就達到了。
Git Tutorials
想要學會如何使用GitHub,首先要我們要明白Git的原理和一些簡單的操作使用,接下來我就按照目錄的順序,開始我們的Git之旅吧:
Git-開源的分布式版本控制系統,它的功能通俗點說就是可以用來方便的管理我們不同項目的各個版本,可以在不同的機器上對一個項目進行維護,修改。之所以稱其為分布式,是因為我們每個人都可以Download一個倉庫到自己的本地上, 對其進行修改,然后提交到遠程倉庫去。
- MsysGit 的安裝(本篇以window環境為例)
根據你的操作系統是32位,還是64位的下載一個對應版本MsysGit,因為MsysGit是安裝最簡單的一個,所以別的就不推薦了,免得過于煩人。
-
初始化工作
假設你已經安裝好了MsysGit,我們開始第一步吧:首先打開Git Bash,我們看到一個類似Window控制臺的界面。我們接下來要做的感覺有點像是一個迷路的人進了警察局填單的過程:-
首先得填填你的名字啊,郵箱吧
$ git config --global user.name "JIANLAM" $ git config --global user.email "mrkinlam7@Gmail.com"
大家英文好,當然知道這段代碼的意思就是:Git 配置 --全局變量:用戶的名字/郵箱,所以把你自己的名字郵箱填上去吧(別填成我的哦),那我怎么知道我填進去有沒有被記錄在里面呢,那就用這行命令,就能得到一個系統配置的清單,包括后面的縮寫配置都會被記錄在這里。
$ git config --list
-
接下來警察得問你家住哪里吧
-
我們用命令pwd看看自己所在的位置,原來我們在C盤的用戶文件,志堅下面。為了方便操作,我們到桌面去,cd 到桌面Desktop,然后我們在桌面創建一個folder(文件夾),并cd到里面去,這和window下操作很像吧,如果你要倒退就可以用命令:
$ cd ..
- 我們的第一個倉庫
為什么這個folder取名為lovepoems呢,有句話說的好:生活不只有茍且,還有詩和遠方。
想學Git的朋友想必心懷遠方,那怎么能少了詩呢。我們接下來就來創建一個倉庫(Repository又稱為版本庫),這個倉庫用來堆我們的情詩。輸入命令:$ git init
下面的提示我們說:你初始化了一個空的Git倉庫在lovepoens的.git文件下,這個.git文件是一個隱藏的文件,里面有管理我們倉庫的重要文件,所以沒什么事不要碰它,到此我們的倉庫就建好了,是不是很簡單呢。
- 添加與提交
我們來寫第一行情書,來到lovepoems倉庫下。創建一個txt文本,名字叫MyDarling,內容用NotePad編輯的(推薦大家使用),如下:
關于這段肉麻的一行情書,我們看看倉庫本人怎么說:
由于我們把lovepoems創建為一個倉庫,里面一旦有文件被修改,創建,刪除等,倉庫就會立刻察覺到。我們看到右邊多了一個藍色的英文 master 表示我們現在在主分支,分支是什么鬼,后面再說吧。我們用命令 $ git status
查看目前倉庫的狀態,它說在分支master上,有一個未被追蹤的文件,然后它很熱心的提出,你可以使用 $ git add <file>
的方式把它添加到準備要提交的隊列中去。
好吧,你是倉庫你說了算:
我們把MyDarling文件添加進去,然后用命令 $ git status
看看它說啥,它說有一個新文件MyDarling準備提交。
接下來我們把文件給提交了:
我們用命令$ git commit -m " sth want to say"
去提交我們的MyDarling文件,其中-m的意思就是Message, 就有點像是一個標簽,關于你這次提交想說的一些提示性的訊息。我們同樣用熟悉的命令 $ git status
來看看倉庫的狀態,它說沒東西可提交了,工作區的文件很干凈。其實翻譯為干凈還是太奇怪了,應該說工作區的文件沒什么異樣。
接下來我們來看看Git 的workflow(工作流程):
我們看到一共分為三個部分,第一個是 Working copy 工作副本->就是你本地的電腦;第二個是 Staging area 暫存區域(或者叫Index)->就是準備被提交的區域;第三個圖中畫的不全,是一個被HEAD指針鎖定的Master分支,我們上面說了剛剛創建的倉庫Repository就包涵了這個Master分支。既然圖畫的不全,我們自己來畫一個:
圖中我們可以清晰的看到整個流程,我們假設在工作區有個readMe.txt文件,接下來我們就把它添加到暫存區,接著再提交到Master這個主分支。而一旦我們添加到Repository倉庫之后,倉庫就會tracked(追蹤)這個文件,以后這個文件要是有什么變化,我們就可以馬上知道。
現在我們來寫多兩首詩,分別叫prettygirl 和 Goodbye:
要是有女程序媛看完以后,肯定說典型的渣男!!~額,反正我不是。好了,詩寫完了自我感覺不錯,把它加到倉庫吧。滿滿的一屏命令行,先 $ clear
清一下屏吧:
老規矩,先看看倉庫什么狀況,用命令: $ git status
,果然有我們剛剛寫的兩首一行情詩沒被添加進去,接著我們可以用$ git add .
把所有文件都添加到 Staging area 暫存區中去,再看看狀態,它說有兩個文件已經準備提交了。
那就提交唄,多大點事:
我們把它提交,并且難過的留下了一個標記,"my heart is broken"。其實大家應該發現了,我們添加的時候可以添加很多個,提交的時候就一次性把所有東西都提交了。而且這兩步是必不可少的,大家要留心了。
到此為止,我們看看倉庫都有些什么東西: $ git log
我們看到自己的訊息,時間,還有兩次提交的版本名字,還有一個commit id。
---寫于15.5.2016
- Git的時光倒流
上面的日志確實還行,夠詳細,但是太多了,我們用
$ git log --pretty=oneline
來展示漂亮的一行。
好了,現在只有commit id號和版本留下的標志。昨晚一宿沒睡想了想,她是一個好女孩啊,被她看見了,太傷她心了,渣男一只。還是回到上一個版本的節奏吧。那要怎么做呢:
我們其實一直在HEAD指向的Master分支上,前面大家都知道了,即HEAD指向的當前版本->my heart is broken。HEAD^表示上一個版本,HEAD^^表示上上一個版本,如果你有commit id 號,直接表示也可以,因為它是唯一的標識。當你用命令$ git reset --hard HEAD^
,HEAD指針就會指向下一個版本,我們來具體試試:
我們首先看看自己的位置,在lovepoems文件夾下。用命令$ ls
看看該folder下都有啥:好,確實是我們寫的3首一行情詩。接著我們就要回退版本啦,玩過英雄聯盟的人應該覺得,有點像艾克大招不是么。敲下命令$ git reset --hard HEAD^
,然后神奇的發現我們倉庫下就只有MyDarling這個文件了!它也提示我們,恭喜你回到過去,你現在所處的位置是上一個版本,my first love pomes。
有人說,如果哪天女朋友把我lol符文全部融了,我要拿出那個傷心欲絕的版本刺激她該怎么做呢:
我們用命令$ git reflog
就可以查看所有做過的操作,我們看到最下面的兩個就是我們一開提交的兩個版本,前面有個commit id號,這次我們用它來轉換版本:
這樣我們就又返回到最新的版本了,并且知道這個方法后就可以任意穿梭時空了,還有就是commit id可以不寫全,寫幾個數字就可以了。上面的$git reset --hard xxx
中reset我知道重設的意思,那--hard是什么呢,我也不知道,看看官方文檔怎么說:
在 Git參考文檔中找到reset里面--hard的介紹:
它說重新設置暫存區和工作區,任何對追蹤文件修改的提交都會被丟棄。哦,原來是這樣。大家想深入學習Git的這也不失為一種學習方式,本文只是為如何使用Github做鋪墊,想成為Git大師還得靠大家自己努力呢。
- 撤銷 ( Unstage )
每個成功程序猿的背后都有一個厲害的程序媛,你女朋友也會用Git啊,某天她看到你寫的情詩被深深的打動了,決定也寫一行情詩給你:
她微信截了圖給你,你收到以后整個人都不好了,首先你是處女座,其次這詩太美了,無力吐槽。你坐在地鐵上,琢磨著該怎么撤銷它:
假如她只是在工作區修改了,那好辦啊,手動刪了那句或者輸入命令$ git checkout -- MyDarling.txt
不就撤銷了嗎。那如果添加到暫存區了,或者提交了怎么辦,可以輸入$ git reset HEAD MyDarling.txt
先返回到上一個區域,然后再用$ git checkout -- MyDarling.txt
命令,修改的內容也就順利撤銷了。
其中
$cat xxx.txt
是查看某文件的內容。
- 文件管理
災難終于告一段落了,可以專心寫詩了。某天靈感來了,覺得這個MyDarling的名字好像跟詩沒什么關系,于是把它改成了onlyYou。我們看看倉庫怎么說:
大概意思是說,你想改名字啊,可以啊,先把MyDarling.txt 通過$ git rm <file>
的形式刪除,然后在把onlyYou.txt添加進來。好唄,試試看:
它提示我們已經重命名了,果然成功了!
- 移動
每次都要這樣弄,不是很容易作死自己嗎,這里介紹一個更簡單的方法:
我們使用$ git mv xx.txt xxx.txt
的命令,xx.txt是更改名字前的文件,xxx.txt是更改名字后的文件,我們看到果然也成功了。如果你要把這個修改后的文件移動某個目錄下只要在前面加個文件夾名就好了,$ git mv xx.txt file/xxx.txt
- 文件的刪除
某天你喜歡的女生跑去跟別的男生開黑了,從那天起,你的天空仿佛失去了顏色,不再相信愛情了,想把寫過的詩給刪了:
刪了,什么都沒了:
某天你發現原來那個是她弟,希望又來了,想把詩找回來。所幸我們早已同步給了倉庫,就相當于我們本地一份,倉庫一份。從它那里拿回來就好了:
果然回來了,當然如果你要狠心點把倉庫的文件都刪了,就可以用$ git rm xx.txt
這個時候你本地Working copy的文件也會被刪了,最后提交一下就可以了。
- 分支
之前我們遺留下來一個問題,什么叫分支。不知道大家有沒有看過《心靈想要大聲呼喊》里面要表演一個音樂舞臺劇,敲定以后,大家就開始分工合作了,有人要弄服裝設計,有人要弄舞臺燈光,有人要設計舞蹈,有人要學唱歌,這就是分支。等到家都弄得差不多了,在把大家的匯總,那這個舞臺劇就形成了。
假如現在出版社要我寫一些更感性的詩,那我可以這樣做:
命令
$ git branch xx
可以創建一個分支,再用$ git checkout xx
進入這個分支。如果嫌麻煩,你也可以用這句命令,一個頂兩個:git checkout -b xx
創建并進入該分支
在添加一句詩,最后提交就完事了,我們看到果然修改成我要的樣子了。
我們現在回到主分支master上:
我們神奇的發現onlyYou.txt文件里面的內容并沒有發生任何改變。這就認證了我們的設想,只要沒有匯總,主分支上是不會受到其他分支影響的。主編看了下我的詩覺得寫得不錯,于是決定采用這首詩:
用命令
$ git merge xx
合并分支,我們看到onlyYou.txt文件,果然多了最新寫的詩,最后用命令$ git branch -d xx
刪除分支即可。
幫大家總結了一下,如圖:
-
縮寫
$ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch
我們一開始配置全局變量,也是這樣的格式,這里配置的是縮寫,因為繁瑣的輸入,你可能會厭倦了commit這樣長的輸入,所以我們可以通過上面的設置把它簡化成ci, 這樣以后你要提交的時候,就可以寫成這種形式:
& git ci -m"xxxx"
還有一個命令要告訴大家的就是,可以查看工作區和暫存區文件的不同,做了哪些修改:
$ git diff <file>
遠程倉庫
好了,到此Git就介紹完了,大家對它是不是有更多的理解了呢。下一篇,我們就要來講講如何使用GitHub了。如果你覺得對你有所幫助,那就給我一點點鼓勵,謝謝!~祝大家學習,工作愉快。
文/Jian_LAM(簡書作者)