使用git一張圖就夠了

編程語言 Git Java 歡聚時代 過好每一天 2017-05-21

現在,版本控制工具中,git逐步成為主流。他的分散式的特性是它超越svn漸漸獨霸江湖。如果你還不熟悉git,通過本文,你有個最基本最實用的理解;如果你熟悉git,溫故而知新,為你加深對git的理解

使用git一張圖就夠了

git最基本命令使用圖

上圖是代碼提交和撤回時用到的命令和此命令影響範圍。理解了這幅圖,它滿足了你日常工作中對git的要求

git從本地提交代碼到遠程的基本流程為:你本地編碼實現功能後,你首先要做的是將代碼從你workspace(項目目錄)添加到index(暫存區),然後提交到head,最後推到remote repo(遠程庫)

git作為分散式(分佈式)的版本控制工具,我喜歡稱分散式,更具體形象,好理解。所謂分散,每個員工本地都有一個自己的倉庫,開發代碼像你自己的倉庫提交。你不影響別人的,別人的也不影響你的,互不干擾。最後把沒有問題的代碼一併push到git中央倉庫。

git之所以有分散式的功能。離不開他核心的幾個概念:git有四個庫,workspace、index、head、remote repo。其中workspace、index、head屬於你本地私有的庫,remote repo就是git中央倉庫。結合上圖,可以更好的體會

如果你對svn熟悉的話,比較一下他們倆,你會有更深的理解。

git與svn最大的不同就在於它的分散式,svn像一個我們無法觸及巨大無比的中央倉庫,每個員工都向這個中央倉庫提交代碼。就像一個仙人球,出來的每個刺就是一個員工的電腦上的svn分支。可想而知,萬一哪根刺不聽話長彎了就很可能扎到其他的刺。也就是一個員工提交代碼時誤操作影響了他們的分支,最終影響大局,使中央倉庫剪不斷,理還亂。

簡述圖中涉及到的關鍵命令

1. git add [file]

這可能是你接觸的第一條個命令。將你的功能代碼添加到index

2. git commit

代碼到index,下一步就要提交到head。這裡會生成提交記錄列表,通過這些記錄,你可以進行回滾、退回等操作

3. git push

將本地庫的代碼推到遠程庫,供大家使用功能和上線使用

4. git checkout

通過此命令,可以用index區的代碼覆蓋掉workspace的代碼。實際場景為:你寫了一個main方法測試一個map是否可以put一個null值,這個main只是臨時用,驗證map後就可以不要了。這時,直接運行git checkout .,這些main代碼就沒有了

5. git reset

當你執行git add命令發現add錯了,有一個錯誤代碼add到了index。這時,你可以用git reset命令,用head區覆蓋掉index區的代碼

6. git reset --hard

git add命令執行了,git commit命令也通過了,這時你發現有錯誤代碼提交上來了,這時,你可以這樣操作git reset --hard HEAH^,這條命令會覆蓋workspace、index、head,也就是用遠程庫覆蓋本地所有區的代碼

實際場景運用

我們實際操作一下,來說明這幾個命令的用法

程序中main方法加了一句代碼:System.out.println("hello girl");

使用git一張圖就夠了

首先,使用git status(用法下面有介紹)查看workspace的變化,可以看到我剛剛操作了哪些文件

使用git一張圖就夠了

然後,執行git diff命令(他的用法後面有介紹)查看不同點。可以看到剛剛在intellij中加的代碼:紅色表示刪除,綠色表示新增

使用git一張圖就夠了

這時,我們執行:git add src/main/java/com/yy/AppRun.java,git add操作之後,新增的代碼就添加到了index區,變化的文件由add前的紅色變成了add後的綠色

使用git一張圖就夠了

add成功後,要將新代碼提交到head區,為此執行命令: git commit -m"commit code",新代碼此時已在提交完成

使用git一張圖就夠了

通過git log查看提交記錄,可以看到我們剛提交的記錄

使用git一張圖就夠了

下一步就要把代碼推到遠程庫了。執行:git push origin test後,顯示下圖信息,代碼就推到遠程庫了,你的同事就可以欣賞到你的藝術代碼了

使用git一張圖就夠了

驗證一下,我們到遠程庫看一下新提交的代碼:System.out.println("hello girl");

使用git一張圖就夠了

到此。以上演示了新的代碼從本地workspace庫一直到remote repo遠程庫的過程,從命令角度為git add--->git commit--->git push

下面演示index區覆蓋workspace區

使用git一張圖就夠了

使用git diff可以看到新代碼

使用git一張圖就夠了

現在不想這行代碼了,執行git checkout

使用git一張圖就夠了

同時,到intellij中查看,發現,剛加的代碼已經沒有了

使用git一張圖就夠了

你可能會說,我從intellij中直接刪除就可以了,還簡單,多好啊。是啊,你說的沒錯,但是,在實際開發中,完成一個功能往往涉及多個類還有配置文件,這時你早已記不清都修改了哪些吧。所以,這時git checkout .比較,哪個更簡單呢

下面演示head區覆蓋index區

intellij中新加一句:System.out.println("hello xiao mei nv");

使用git一張圖就夠了

執行 git add src/main/java/com/yy/AppRun.java

使用git一張圖就夠了

執行git diff

使用git一張圖就夠了

git diff沒顯示不同信息,說明workspace區與index區代碼是一樣的,也就證明新代碼已經到index

現在不想要新加的代碼了,需要回退index區和workspace區。

執行git reset src/main/java/com/yy/AppRun.java,之後執行git diff

使用git一張圖就夠了

發現workspace區和index區存在不同,也就證明了index退回了原來的版本

下面演示head區覆蓋index區和workspace區

intellij中新加一句:System.out.println("hello da mei nv");

使用git一張圖就夠了

執行git add,然後git commit -m"commit",新代碼已經提交到head區

使用git一張圖就夠了

使用git一張圖就夠了

這時如果不想要新加的代碼了,執行:git reset --hard HEAD^

使用git一張圖就夠了

查看intellij,剛提交的代碼沒有了,也就是代碼回退到加入新代碼之前的狀態了

使用git一張圖就夠了

除了圖中的命令,還有一些有必要知道的命令,上文實際操作場景中已應用到一部分

7. git status

查看你本地修改的代碼

8. git diff [file]

比較你項目庫和index的不同點。不指定file則比較項目所有不同點

8. git log

查看提交記錄列表

9. git merge branchName

合併branchName到本分支

10. git branch -a

查看本地和遠程庫所有分支

11. git fetch -p

同步(拉取)遠程庫分支信息,假如遠程庫有的分支刪除了而你本地還有對應這個遠程分支的本地分支,這條命令會刪除調沒有遠程分支的本地分支

12. git chekcout branchName

切換到branchName分支,沒有這個分支就新創建一個

以上只是把常用的git命令簡述一下,同時結合實際場景運行起來。希望幫助你理解學習git,用git更好的幫助你管理代碼,實現功能,完成任務,站穩腳跟,提升自我,成為大牛

相關推薦

推薦中...