不少人認爲Git太混亂或太複雜而沒有把它當作版本控制工具。然而Git正在成長,另外不少頗有意思的事情也隨之發展起來。這篇文章瞄準了想開始用Git的人羣,一般是從Subversion(另外一個版本控制工具)轉過來的。這篇文章將包含你須要學會的大部分最經常使用的基本技能。
讓咱們開始吧
使用Git你得安裝一個版本庫。你能夠用一個已經存在的目錄來作一個Git庫,或者建立一個空目錄。
把當前的目錄設置爲一個Git庫咱們只須要初始化:
git init
要作一個新目錄當作Git庫的話,咱們須要指定一個目錄:
git init newrepo
從如今起,除非另有說明,咱們假設你一直都在這個Git庫的根目錄。
添加新文件
因此咱們只有一個什麼都沒有的庫。你能夠用add命令來添加文件:
git add filename
想添加你目錄裏的全部文件你能夠用這個:
git add
提交版本
如今咱們已經添加了一些文件,咱們想讓它們真正的存在Git庫裏。能夠經過下面這條命令這把它們提交給Git庫:
git commit -m 「Adding files」
若是遺漏了-m,你須要本身在編輯器裏寫上信息。
編輯文件
當你對某些文件作出改變時,你能夠試試git status來看看提交後會發生什麼事。你會注意到一個修改文件的列表,以及一條信息:
no changes added to commit (use 「git add」 and/or 「git commit -a」)
因此除非你明確地用git add添加文件並提交到git庫,否則git commit一點用也沒有。若是你正在找能自動提交本地修改文件的提交命令能夠加上-a標識:
git commit -a -m 「Changed some files」
或者若是你只想把某些文件,而不是運行git add,咱們能夠傳遞一些指定的文件:
git commit -m 「change some files」 file1 file2
必定要注意-a不會提交新文件,而只會提交修改後的文件。
發佈你的Git庫
把你的庫放到服務器上咱們須要從創建一個空庫開始,而後把你的Git庫上傳到服務器上。
cd /tmp
git clone --bare ~/your/repo/path project.git
scp -r project.git ssh://example.com/~/www/
如今若是咱們我不少提交文件並想把它們推送到那個位置:
git push ssh://example.com/~/www/project.git
若是你不喜歡每次都敲URI咱們能夠從一個克隆的項目記着它的地址來採起點便利方法:
cd..
git clone ssh://example.com/~/www/project.git project
如今git push就會推送至他克隆來的URI。你能夠經過在你的庫裏手工編輯.git/config來實現這一點。
獲取上游的改變
若是你已經照上面把推送安裝好了:
git pull
上面這個命令將會把庫裏的改變獲取回來而且把它們結合起來。從非默認路徑獲取只須要指定URI:
git pull http://git.example.com/project.git
五分鐘以外的獎勵
提交
你已經注意到了,Git以「提交」的方式在思考。這些提交被一個hash值惟一地標記。你能夠用git log命令瀏覽提交歷史和相應的hash值。每一個提交都包含了改動信息,新文件和那些被移除的文件。Add命令會把一個文件放到提交裏面。git reset HEAD會把計劃提交裏的一切都移除掉,但不改變文件裏的內容。
移除
若是你想從你的Git庫裏吧一個文件移除,咱們用rm命令來把它從之後的提交裏移除:
git rm file
分支與合併
分支是在本地迅速完成的。咱們用branch命令來創建一個新分支:
git branch test
branch命令並不會把咱們移動到咱們創建的那個分支裏去,它只會建立。咱們用checkout命令來變換到不一樣的分支裏去:
git checkout test
第一個分支,或主要分支,被稱爲「master」。
git checkout master
然而你在分支裏提交的改變並不會在主分支裏體現出來。當你完成後,或者想推送改變到主分支的時候,切換到主分支並使用merge命令:
git checkout master
git merge test
另外若是你再也不須要這個分支的時候你能夠用branch命令傳送-d標識來刪掉它:
git branch -d test
穿越時空
你能夠再次使用checkout命令很快地恢復Git庫到之前的狀態:
git checkout HASH
沒有提交的改變將會和你一塊兒穿越。用git checkout master命令來恢復到預置狀態,普通分支也的作法也同樣。若是你在過去提交的分支是自動建立的,你對文件作出的改變會與前面的內容結合起來。
之後被掩蓋的真相
當在分支之間切換的時候,你本地的改變也會隨着變化。有時你想切換分支但又不想提交或讓這些改變隨着變化。Stash命令容許你把改變放到一個安全的存儲裏。
git stash
你能夠經過傳遞一個apply或pop參數來從新得到它:
git stash apply
apply和pop命令之間的不一樣其實很簡單。apply把隱藏狀態找出來並加以運用,但在隱藏處還保持它原來的狀態(至關於複製出來文件並加以運用,原來的安全存儲區域不變)。pop命令會找到隱藏狀態,加以運用,而且會把隱藏狀態刪除掉。git stash clear命令會把隱藏區域的內容清空。