實用且簡單的Git教程,輕鬆搞定多人開發

鬧鬧吃魚發表於2019-02-22

實用且簡單的Git教程,輕鬆搞定多人開發

俗說金三銀四,大部分人都選擇在這個時候找工作

有拿完年終獎準備跳槽的,也有年前就辭職,已經休了一個長期年假的,還有剛走出校門的青澀少年們

換了新工作,肯定要接觸新專案,現在絕大多數專案都是使用Git進行版本控制

這篇文章,主要目的是在多人開發中讓你能熟練使用Git

從實戰出發,不大談原理,只談實際應用,省去大量的查詢文件的時間

入職新公司,接觸新專案,基本是不需要你自己搭建Git專案來託管code的,所以這裡就不談搭建了,只談在開發實戰時,如何使用Git

文末有總結,便於查閱

第一件事,肯定就是先安裝Git了 官網下載Git比較麻煩,需要有梯子來幫助你,才能摸到它,這裡直接給你一個Github上的映象地址供你下載安裝

github.com/waylau/git-…

若不會安裝,請移步搜尋引擎,搜尋Git安裝教程,本文不過多描述安裝過程

第一次使用Git

安裝好後,直接開啟Git Bash,也就是Git 的控制檯程式,就可以開始使用了

第一次使用Git,需要先配置自己的郵箱與名稱

配置郵箱地址

git config --global user.email "NaoNao.@nao.com"
複製程式碼

配置使用者名稱

git config --global user.name "NaoNao"
複製程式碼

配置完,Git不會給出任何提示,Unix的邏輯就是,沒有提示就是最美的提示。

注意git config命令的--global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名稱和Email地址。

要想檢視是否配置成功,依然是使用上述命令,把引號以及引號內的內容去掉即可。

拉取專案

配置好我們的個人資訊後,自然也就需要拉取專案了

在磁碟中新建好存放專案的資料夾,進入資料夾點選滑鼠右鍵,選擇Git Bash即可

溫馨提示:使用Git託管的專案,有兩種地址,Https與SSH。 使用Https地址拉取,驗證一次密碼後,以後每次拉取/推送的時候不再需要驗證密碼。 使用SSH地址拉取的專案,每次拉取/推送的時候都需要密碼驗證。 各位讀者自己抉擇。

我的專案地址是 github.com/AdolphKevin…

git clone https://github.com/AdolphKevin/NaoNao.git
複製程式碼

將你的專案地址替換掉我的專案地址即可

分支管理

說分支管理之前,在此做個背景說明:一般在專案開發中會有2個主分支(master與develop) master分支上的內容是釋出在生產環境執行的內容 develop分支是所有開發人員開發完成釋出到測試環境的內容 其它各種feature分支都是各位開發人員在開發時拉取使用的分支

此文,也沿用此方式,各位讀者按照自己實際情況判斷

拉取下來後,我們要進行開發,肯定不能在master分支上開發,一般在專案上都會有各種分支

專案clone下來,首先就是檢視分支了

git branch -r
複製程式碼

加上-r是代表檢視遠端倉庫的分支,要是檢視本地分支,只需要把-r去掉即可,-r是remote的簡寫

檢視遠端分支,所有的分支名前均會帶有origin/ 的字首,這個字首代表著遠端分支,拉取遠端分支,填寫遠端分支名時不需要帶上origin/

接到開發任務,我們需要從遠端倉庫上將我們需要開發的分支拉取到本地

git fetch origin x(遠端分支名):y(本地分支名)
複製程式碼

使用上述程式碼,可以將遠端分支拉取到本地,並建立本地分支

接著就是要將剛剛建立的本地分支與遠端分支做關聯了,做了關聯之後,拉取更新與推送都不需要再指定分支名稱

git branch --set-upstream-to=origin/x(遠端分支名)  y(本地分支名)
複製程式碼

其中,x是你本地分支對應的遠端分支;y是你當前的本地分支。

切換分支

做完關聯後,我們們就需要切換分支,在特定的分支上去進行開發任務 先檢視本地分支,找到我們需要開發的分支

git branch
複製程式碼

再切換到我們需要開發的分支上

git checkout y(分支名)
複製程式碼

提交內容

我們在自己的分支上按照需求完成了開發任務,接著就是將我們開發的內容提交到遠端倉庫了

雖然我們們所在的分支,除了自己之外,按理說是沒人會在自己這個分支上再進行開發,所以推送前拉取更新也不很必要

但是為了避免不必要的麻煩,提交之前還是先拉取一下最新的資料

git pull
複製程式碼

獲取了最新資料後,如果有別的同事動了我們們的分支,那肯定得先解決一下檔案的衝突,若沒有人動,那也就不用處理了

接著將我們新增/修改的檔案提交到本地暫存區

git add xxx(檔名)
複製程式碼

xxx代表著檔名。當然,開發時我們們基本上很少只修改/新增一個單獨的檔案,當修改或新增了很多檔案時,讓我們一個一個檔案的add,能把人給累死

所以Git也給出了批量add的方法,簡單粗暴

git add -A
複製程式碼

-A是All的縮寫,git add all 可以提交未跟蹤、修改和刪除檔案。 .git add . 可以提交未跟蹤和修改檔案,但是不處理刪除檔案。

提交到暫存區後完成後就是將改動內容全部提交

git commit -m "提交到暫存區"
複製程式碼

引號內的文字,是此次提交內容的一個說明描述,以後看日誌時也便於知道此次進行了什麼內容的修改

提交完後就是將本次修改的內容推送至遠端倉庫

git push
複製程式碼

好了,到這裡push的時候,坑來了~~~

如果是自己一個人的專案,此時如何push都沒問題,但問題就出在,我們們是多人開發的專案,我們們的分支是需要與主分支合併(merge)。

別的同事的任務完成了,早已推送到我們將要合併的develop分支上了

所以我們在push之前需要進行code merge ,將develop分支上的內容merge到我們當前的feature分支上

程式碼合併

此時我們在feature分支上已經將修改內容commit了 需要將develop分支的內容合併到當前分支,先切換分支到develop上,再獲取一次更新

git checkout develop
git pull
複製程式碼

這裡切換到develop分支上獲取更新時有個小坑,我們們暫且按照一切順利來處理,後面再說一些常見的意外情況的處理。

獲取完更新後,再切換到我們的feature分支上,將develop的內容合併到我們的feature分支上

git checkout feature
複製程式碼

合併某分支到當前分支

git merge develop
複製程式碼

解決衝突

執行merge後,如果有衝突,控制檯會將有衝突的檔名展示出來,我們按照檔名找到對應檔案,將衝突給解決掉後。

開啟檔案我們可以看到衝突的內容,例如:

<<<<<<<HEAD hello world feature ======= hello world develop >>>>>> develop

Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容 <<<<<<<與=======之間的內容為當前分支的內容 =======與>>>>>>之間的內容為develop分支的內容(換句話說:就是需要被合併的分支內容)

將不需要保留的內容刪除即可解決衝突

解決衝突後,我們再將當前的feature分支推送到遠端倉庫

git push
複製程式碼

執行完本命令列後,即可將本地分支內容推送至遠端倉庫

獲取更新時的意外情況

前面說從feature分支切換到develop分支拉取更新時,會有個小坑,因為有時候Git會報錯

Git pull - Please move or remove them before you can merge

這個錯誤是因為無論原始檔案中.gitignore 檔案的內容是什麼,檔案都被新增到遠端儲存庫中。

由於檔案存在於遠端儲存庫中,因此git也必須將它們提取到本地工作樹,因此會抱怨檔案已經存在。

.gitignore 僅用於掃描新新增的檔案,它與已新增的檔案沒有任何關係。

因此,解決方案是刪除工作樹中的檔案並提取最新版本。或者長期解決方案是如果錯誤地新增了檔案,則從儲存庫中刪除檔案。

這時我們在develop 分支上刪除當前目錄下沒有被track過的檔案和資料夾

git clean -d -f 
複製程式碼

現在重新獲取更新即可

開發到一半,卻需要切換分支

軟體開發中,Bug就像家常便飯一樣。有了Bug就需要修復,在Git中,由於分支是如此的強大,所以,在實戰中,每個Bug都是通過一個新的臨時分支來修復,修復後,將Bug分支合併到develop與master兩個分支上,然後將臨時分支刪除

注意:將Bug分支合併到develop與master兩個分支上,是在遠端倉庫完成。在本地,是需要將develop與master分支先獲取最新,然後將這兩分支分別合併在Bug分支上,解決衝突後直接推送Bug分支即可

可我們在feature分支上開發功能開發到一半,leader突然跑來告訴我們,生產環境出現了一個Bug,需要我們們緊急修復,我們們興致勃勃的使用git checkout Bug命令,打算切換到Bug分支上去修復Bug

結果……Git卻告訴我們,無法切換過去,因為我們目前所在分支沒有提交……

可我們若要完成開發任務再去修復Bug,可能需要好幾個小時甚至幾天時間才能完成,而Bug修復卻是緊急任務,這該如何是好呢?

問題不大,不慌。此時我們可以將當前分支開發的工作狀態儲藏下來,待我們解決了Bug,再恢復我們現在的狀態

git stash
複製程式碼

執行完上述命令後,我們再來看看我們工作區是否乾淨

git status
複製程式碼

我們發現工作區非常乾淨,此時我們就可以順利的執行git checkout Bug到Bug分支上去修改Bug了

我們們現在將Bug也解決了,也推送了,現在又回到feature分支繼續我們們之前的任務了,切換回feature分支後,之前修改的內容也沒有恢復啊!說好的儲藏了工作狀態呢?

我們們就來看看所有儲藏的工作

git stash list
複製程式碼

使用上述命令,Git會將所有的儲藏工作羅列出來,當我們想要恢復其中某一個儲藏狀態時,指定其名字就好了

git stash apply stash@{0}
複製程式碼

上述的stash@{0} 是當前分支儲藏的工作名,各位讀者根據自己的git stash list中的內容,自行替換

切換後,確認完當前狀態無誤了,就可以將之前儲存的儲藏刪除

git stash drop stash@{0}
複製程式碼

覺得要執行兩行命令比較麻煩?沒關係,還有一次性解決問題的方法 切換後並自動刪除

git stash pop stash@{0}
複製程式碼

不過我個人不大推薦這種方式,萬一我們們恢復的儲藏指定錯了呢,要恢復起來還挺麻煩的。

版本回退

在開發時,總有需要回退到某個版本的時候,不然用版本控制系統幹嘛?是吧

我們先來看看我們的歷史版本

git log
複製程式碼

現在控制檯輸出了最近三次提交的日誌資訊,友情提示一下,按鍵盤Q可退出,按回車可檢視更多的日誌

要是嫌棄輸出的內容過於冗雜,可以讓Git顯示個簡單版

git log --pretty=oneline
複製程式碼

加上一個--pretty=oneline引數,就可以只看提交的ID了

現在我們可以根據當時commit時填寫的描述資訊,來判斷哪一個ID是我們想要回退的版本

版本的回退,有兩種常用的方式

回退到上一個版本

git reset --hard HEAD
複製程式碼

根據commit的ID,回退到指定版本

git reset --hard commit_id
複製程式碼

commit_id這個版本號沒必要寫全,只需要寫6位以上就差不多了,Git能自己找到它,若存在前6位重複ID,那再多加幾位就好了

版本的回退也非常的簡單吧,Git的命令列操作寫到這兒,也進入尾聲了。上述的命令基本可以滿足日常的使用

寫在最後

Git命令列的操作,使用起來並不複雜,作為開發人員,要是沒有深入瞭解Git的意願,會用就行了,使用Git的要領就是大量使用分支 總結一下本文牽扯到的git操作 git config --global user.name檢視使用者名稱或配置使用者名稱

git config --global user.email檢視email或配置email

git clone將遠端倉庫的專案克隆到本地

git branch檢視分支

git branch -r檢視遠端分支

git branch <name>建立分支

git fetch origin origin/remote_branch:your_branch將遠端分支下載到本地,並建立分支

git branch --set-upstream-to=origin/remote_branch your_branch將本地分支與遠端分支做關聯

git pull獲取更新

git clean -d -f刪除當前目錄下沒有被track過的檔案和資料夾

git merge <name>將目標分支合併到當前分支

git add將內容新增到暫存區

git commit將新增的內容提交

git push將本地提交內容推送到遠端倉庫

git checkout切換分支

git branch -d <name>刪除分支

git stash儲藏當前分支所有內容

git stash list檢視當前分支儲藏列表

git stash apply恢復指定儲藏內容

git stash drop刪除指定儲藏內容

git stash pop恢復並刪除指定儲藏內容

git status顯示工作目錄和暫存區的狀態

git log顯示commit的詳細日誌

git log --pretty=oneline只顯示commit的ID與描述

git reset --hard HEAD回退到最近的一個版本

git reset --hard commit_id根據commit_id回退到指定版本

實用且簡單的Git教程,輕鬆搞定多人開發

關注微信公眾號,閱讀更及時,文字排版,閱讀體驗更好!

相關文章