手把手教你用git,非常詳細,輕易上手

hcmony發表於2017-10-20

本文轉自:http://www.cnblogs.com/my-freedom/p/5701427.html

一、如何安裝git

下載地址:

https://git-scm.com/download/win

根據自己的電腦選擇是32位的還是64位的。下載完後直接執行,之後一直next就好了。安裝成功後,會有這樣一個標誌。

 

二、如何使用git

(1)首先你要點進去https://github.com/這個網站,註冊一個github賬號。註冊好之後,要記住郵箱和密碼。

(2) 開啟之前的那個圖示就是這樣一個視窗,首先Git是分散式版本控制系統,所以需要填寫使用者名稱和郵箱作為一個標識,分別輸入這兩個命令,使用者名稱和郵箱需要換成自己的。

 

     (3)  開啟之前的那個圖示就是這樣一個視窗。現在比如我在我的C:/wamp/www/aaa有一個專案,我要對它進行管理怎麼辦呢。直接在控制檯裡面輸入  cd   c:/wamp/www/aaa  之後你就會在aaa這個目錄裡面了。那如何對它進行管理呢。直接在控制檯輸入git  init

 

      之後你去檢視aaa目錄裡面發現裡面多了這樣一個東西

 

      這是一個隱藏資料夾,有點電腦看不見,是因為資料夾選項設定的隱藏檔案不可見,這個去控制皮膚裡的資料夾選擇設定一下就好了。

下面我們接著來操作,試著開始寫我們的專案。

首先我寫一個首頁叫index.html

 

     現在我在我的頁面裡寫好了這樣一段話,儲存之後我們接著來進行操作。

現在我們開始在git裡面輸入一段話 git status

 

我們可以看到index.html這個檔案是紅色,這是說明我們這個檔案已經做了修改,但是還沒儲存到本地倉庫裡面。現在我們接著執行操作 git add  index.html  敲完這個命令接著git status發現index.html變成綠色的啦。

 

接著我們敲命令  git commit   -m  “the first time”

     敲完之後,接著使用git status發現上面說工作區很乾淨,沒有檔案要被提交。現在我來解釋一下這幾個命令。

      首先你得明白這幾個概念,工作區就是你現在編輯器所處的那個工程裡面,在這個指的就是aaa這個資料夾。剛才你寫了一個index.html寫完之後就是往工作區增添了一個檔案,然後你用git status檢視狀態發現,index.html是紅色的。git status是什麼意思呢,就是檢視你工作區和暫存區有沒有檔案沒被提交到本地倉庫,如果有工作室未向暫存區儲存的就顯示紅色,如果有暫存區沒提交到本地倉庫的就是綠色。那麼什麼是本地倉庫呢,就是一開始說的那個不可見的資料夾,你一執行git init命令就會有一個本地倉庫出來

     現在我們接著來看,如何從工作區把檔案提交到暫存區,就是使用命令git add index.html就可以了。把檔案從暫存區提交到本地倉庫呢,就是使用命令git  commit  –m “the first time” 這個引號裡面的內容是隨意的,就是自己新增一個備註,比如自己改動了什麼東西。理解了這句話,我們接著進行操作,我們我的index.html裡面繼續新增一段話。我再git status檢視一下當前的狀態,發現有未向暫存區提交的儲存,接著我們採用 git commit –m “the second time”命令將暫存區的檔案提交到本地倉庫。之後再用git status來檢視一下,發現已經沒有檔案要提交了。

(4)版本回退

      到目前為止,我們已經向工作區提交了兩次修改。Git給我們提供了一個git log 可以檢視我們最近的提交歷史

 

 

      如果看的很亂,可以使用這個命令,git log -–pretty=oneline

 

     可以看出來我們的兩次提交,前面那串黃色的就是我們的版本號。現在我發現我第二次提交的程式碼執行不好使,想回到我原來的那個版本怎麼辦呢

可以使用命令git reset –hard HEAD^這個命令是回退到上一個版本

 

     執行完之後,我再回頭看看我的index.html發現已經變成了我第一次提交時的樣子

     接著繼續。萬一要回退到上上個版本呢,可以使用命令git reset –hard HEAD^^,那要是回到到一百個版本就要寫100^嗎,也太麻煩了吧

現在我們通過git log –pretty=oneline已經獲取到了每次修改的版本號。那麼我們就可以使用git reset –hard 版本號就好了。比如剛才我要回退到上個版本就可以使用git reset –hard 21a77

發現也同樣有效果。這裡版本號不用寫全,寫一部分能表示這個就行。現在我們再用git log來檢視一下現在的狀態,發現我們現在的版本只剩下一個了

 

     但是我現在又發現,我知道原來新版本的解決方法了,我又想回到新版本去怎麼辦呢,現在用git log已經看不到新版本的版本號了。只能採用新的命令了叫做git reflog檢視命令歷史

 

      在這裡發現他記錄了我們所有的操作,現在我們繼續使用git reset –hard e2f3發現我們又回到新版本了。我們發現index.html已經回到原來的狀態了。

 

 

      現在我們接著往下面進行。在index.html裡面我們接著新增一行。

 

     後來發現這句話不是很合適,當然這個時候我們可以把這句話直接刪掉,然後再git add ,就好了。但也可以通過git checkout – index.html。此時我們發現那句話已經沒有了。這種情況適用於我們沒有git add到暫存區之前。如果我們已經git add到暫存區了,怎麼撤銷修改呢。我們可以使用命令 git  reset HEAD index.html先撤銷暫存區的修改,然後我們可以通過命令git diff檢視暫存區和工作區有什麼不同,之後我們可以通過命令git checkout –index.html 發現已經修改好了。但是萬一我們已經提交到倉庫裡呢怎麼辦呢,也就是我們git commit,那就要使用我們上面所說的版本回退了。

(5)刪除檔案

      現在我們在aaa目錄下新建一個檔案叫test.txt。我們在裡面隨便寫幾個字之後,通過git add text.txt 已經git commit –m “the third time”就已經把test.txt已經寫入本地庫裡了

假設現在我們發現我們已經不需要test.txt這個檔案了,所以我們把它給刪了。這個時候你通過git status發現工作區和本地庫裡的檔案不一樣了。

     現在我們有兩種選擇,一種是我們確實要刪除。使用git rm test.txt 之後再git commit –m “remve test.txt”發現我們的本地庫裡的檔案已經被刪除了。那麼另外一種情況就是我刪錯了,我想還原回來怎麼辦呢,使用命令git checkout – test.txt就發現這個檔案已經還原了。

(6)遠端倉庫

     到目前為止,我們已經學會了如何在本地庫和工作區之間進行操作,那這時你就會說我沒有看到如何分工協作呢,彆著急,遠端倉庫還幫你解決這個問題。

首先你要點進去https://github.com/這個網站,登入你剛才註冊的github賬號

ssh-keygen -t rsa -C youremail@example.com

     把這個郵箱替換成自己的

之後一路回車,如果一切順利的話你去你的C盤下去找你的user資料夾,有的叫使用者,你在裡面搜尋一下有沒有一個.ssh的資料夾,把它開啟之後,裡面有這幾個檔案

 

      之後接著開啟那個https://github.com/網站,登入進去。

 

     點選右邊這個綠色的圖表,點開下拉框之後裡面有個setting

 

 

    之後會出來這樣一個頁面,點選左邊的ssh keys

 

 

     開啟之後是這樣的一個頁面,隨便寫入一個title然後開啟你剛才找到的再C盤裡的那個id_rsa.pub.把裡面的內容複製到那個key裡面去,之後點選新增即可。

之後回到一開始的這個頁面,

 

 

   點選中間的那個加號

   選擇第一個,這就相當於你自己在遠端建了一個倉庫。

 

 

     點選之後,會出來這樣一個頁面。現在我們在那個名字哪裡寫上aaa,直接點選建立就好。

目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。

     現在,我們根據GitHub的提示,在本地的aaa倉庫下執行命令:

$ git remote add origin git@github.com:BrouceLee/aaa.git

請千萬注意,把上面的BrouceLee替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠端庫

新增後,遠端庫的名字就是origin,這是Git預設的叫法,也可以改成別的,但是origin這個名字一看就知道是遠端庫。

接著執行命令git push -u origin master

執行完之後,我們發現我們的遠端庫和本地倉庫已經同步了。

 

 

     從現在起,只要本地作了提交,就可以通過命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分散式版本庫!

(7)從遠端庫克隆

     上次我們講了先有本地庫,後有遠端庫的時候,如何關聯遠端庫。

現在,假設我們從零開發,那麼最好的方式是先建立遠端庫,然後,從遠端庫克隆。

首先,登陸GitHub,建立一個新的倉庫,名字叫gitskills:

 

 

      我們勾選Initialize this repository with a README,這樣GitHub會自動為我們建立一個README.md檔案。建立完畢後,可以看到README.md檔案:

現在,遠端庫已經準備好了,下一步是用命令git clone克隆一個本地庫:

我們在想要建立專案的地方執行下面的命令

git clone git@github.com:BrouceLee/gitskills.git

     現在去你你想要建工程的地方開始,就可以發現大體上已經建好了。

(8)分支管理

      分支在實際中有什麼用呢?假設你準備開發一個新功能,但是需要兩週才能完成,第一週你寫了50%的程式碼,如果立刻提交,由於程式碼還沒寫完,不完整的程式碼庫會導致別人不能幹活了。如果等程式碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。

     現在有了分支,就不用怕了。你建立了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。

首先我來建立一個分支

執行命令git checkout -b dev 這樣就建立好了一個dev分支

我們來介紹一下,最開始的時候我們的所有操作都是預設在一個叫做master的分支上操作的,包括提交到遠端庫,等等。關聯遠端庫的時候也是從遠端關聯master分支。當我們用dev這個分支寫完一個專案之後,我們要把這個分支所做的工作向master分支進行靠攏.

我們現在可以通過命令git branch來檢視一下所有的分支

git branch命令會列出所有分支,當前分支前面會標一個*號。

然後,我們就可以在dev分支上正常提交,比如對index.html做個修改,加上一行

 

 

      然後我們執行git add index.html以及 git commit –m “use the dev first”

現在我dev的分支工作已經做完,現在我可以切換回master分支。利用命令

git  checkout master

       切換回master分支之後,我們發現index.html裡面我們新加的那句話不在了。因為我們剛才是在dev分支上做的提交。現在我們要把分支合到master上,就利用命令 git merge dev就可以了,此時再去檢視index.html發現我們在dev裡面做的操作已經在master裡面了。現在我們可以使用命令git branch –d dev來刪除dev這個分支,之後再使用git branch來檢視分支發現只有master一個分支了。因為建立、合併和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

三、解決衝突

      現在我們考慮這樣一種情況,我們新建了一個分支feature1,利用feature1來進行把index.html裡面再加一行,首先切換到feature1這個分支,然後修改index.html,之後提交

 

 

     然後我們切換回master分支,現在我們在master裡的index.html裡面加一句話,之後進行提交。之後我們按照剛才的那種方式合併兩個分支。git merge feature1會發現有衝突出現

 

 

此時應該怎麼解決呢,此時必須手動解決衝突。

四.分支策略

在實際開發中,我們應該按照幾個基本原則進行分支管理:

首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本釋出時,再把dev分支合併到master上,在master分支釋出1.0版本;

你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合併就可以了。

所以,團隊合作的分支看起來就像這樣:

 

最後推薦一個詳細的分工合作的網站,一定要看。https://segmentfault.com/a/1190000002413519#articleHeader2

相關文章