前言
大家好!在下游回來了优妙!不啰嗦快進正題套硼!
本篇文章是面對剛開始接觸Git的新手邪意,所講命令并不全反砌,在文章結(jié)束會放入各路大手的比較全面的文章宴树,有興趣繼續(xù)學(xué)習(xí)的同學(xué)可以看下酒贬。
工作時大家可能有這種感受锭吨,部門里的開發(fā)越來越多零如,并行開發(fā)的需求也越來越多,代碼版本的管理就越來越復(fù)雜御滩,沖突會越來越多芥被。所以急需一個成熟的代碼管理工具來管理籽腕,現(xiàn)在市面上主要使用的是Git矛紫、SVN颊咬。
本篇文章將以操作步驟的方式喳篇,帶大家一步步的學(xué)會Git麸澜。學(xué)會了如何提交倉庫炊邦,再學(xué)習(xí)下Gitflow馁害,進一步規(guī)范代碼管理蜗细!
強烈推薦初學(xué)者手敲Git指令炉媒,知道自己在做什么吊骤。
目錄
- 概念
- 提交代碼
2.1 小提示
2.2 創(chuàng)建工作區(qū)(Workspace)代碼
~ 2.2.1 從遠程倉庫(Remote)拉取
~ 2.2.2 上傳本地代碼并連接遠程倉庫
2.3 修改代碼后白粉,將代碼提交到暫存區(qū)(Index)
2.4 將暫存區(qū)文件提交到本地倉庫(Repository)
2.5 將本地倉庫提交到遠程倉庫(Remote) - 關(guān)于協(xié)作
3.1 拉取遠程倉庫(Remote)代碼到本地倉庫(Repository)
3.2 分支(branch)
3.3 合并分支代碼(merge) - 其他操作
4.1 Git常用命令速查表
4.2 大手的入門文章 - Gitflow工作流
5.1 Gitflow概念
5.2 Gitflow圖解
5.3 Gitflow的主分支
~ 5.3.1 master分支
~ 5.3.2 develop分支
5.4 Gitflow的輔助分支
~ 5.4.1 feature分支
~ 5.4.2 release分支
~ 5.4.3 hotfix分支
5.5 Gitflow小結(jié) - 結(jié)語
沒研究出簡書怎么頁內(nèi)跳轉(zhuǎn)眷细,大家先搜索下溪椎。
1.概念
學(xué)習(xí)具體操作步驟之前恬口,先要理解四個概念祖能,下面看一張圖(從大神那拿的养铸,下面放大神文章的鏈接)钞螟。
咱們先不看上面的線裂明,先理解一下這4個大色塊的名詞:
- Workspace:工作區(qū)太援,平時我們寫代碼的地方提岔。
- Index:暫存區(qū)碱蒙,寫完代碼后讓它變成的待提交的狀態(tài)赛惩。
- Repository:本地倉庫喷兼,提交暫存區(qū)的代碼到這里季惯,記錄進入代碼本地管理。
- Remote:遠程倉庫候学,將本地倉庫的修改的代碼提交到遠程,可以供遠程協(xié)作的人下載纵散。
以上四個名詞是Git中最重要的概念梳码,記好咯,在下一節(jié)非常重要困食。接下來開始介紹Git的操作步驟边翁!
2.提交代碼
2.1 小提示:
該節(jié)會從項目創(chuàng)建(或從遠程倉庫下載)開始翎承,直到代碼提交到遠程倉庫所有的步驟硕盹,建議讀者跟著敲一下叨咖,熟能生巧瘩例。
讀者需要安裝好Git,給大家一份安裝指南甸各,包括各個系統(tǒng)垛贤。
《Git學(xué)習(xí)筆記二 Git安裝》
2.2 創(chuàng)建工作區(qū)(Workspace)代碼
想開始Git操作必須本地有一份代碼是跟遠程倉庫(Remote)相連。這部分代碼有兩種獲取方式趣倾。
-
2.2.1 從遠程倉庫(Remote)拉绕傅搿:(公司項目比較常見)
- 建立自己項目的文件夾,比如:D:\test儒恋。
-
在該文件夾中點擊鼠標右鍵善绎,選擇Git Bash Here(打開Git的命令行界面)。
- 在命令行輸入: git clone <url>诫尽,將遠程git倉庫的地址填入禀酱,成功后完成。
git clone <url> :克隆遠程倉庫的版本到本地牧嫉,成功后本地就有了和遠程倉庫相同的代碼剂跟。并且已經(jīng)和遠程倉庫連接成功。
-
2.2.2 上傳本地代碼并連接遠程倉庫:(自己使用Github的時候酣藻,使用比較多)
- 打開本地項目的文件夾曹洽,比如:D:\test\MyApplicationTest(要在項目的根目錄里)
- 在該文件夾中點擊鼠標右鍵,選擇Git Bash Here
- 執(zhí)行以下步驟(命令具體作用下文說):
git init
git add .
git commit -m "first commit"
git remote add origin 遠程倉庫地址
git push -u origin master - 完成
小結(jié):前者適用于代碼存在于遠程倉庫(Remote)的情況辽剧。后者適用于本地倉庫(Repository)初次上傳到遠程倉庫的情況送淆。
2.3 修改代碼后,將代碼提交到暫存區(qū)(Index)
代碼提交到遠程倉庫的第一步抖仅。寫完代碼后感覺可以提交了坊夫,將代碼提交到暫存區(qū)(Index)砖第,成為待提交狀態(tài),被Git管理环凿。
git add . :添加當(dāng)前目錄所有的文件都進入暫存區(qū)梧兼。
git add <dir>:添加指定目錄所有的文件都進入暫存區(qū)。
git add <file1>:添加指定文件進入暫存區(qū)智听。
以上三種方式羽杰,具體看需要提交多少文件,通常第一種比較常用到推。
如圖執(zhí)行g(shù)it add . 之后沒有任何提示考赛,想看一下是否已經(jīng)加入暫存區(qū)的話怎么辦呢?
git status :查看所有文件是否有修改莉测,是否進入暫存區(qū)颜骤,已提交到本地倉庫的不會展示。
2.4 將暫存區(qū)文件提交到本地倉庫(Repository)
代碼提交到遠程倉庫的第二步捣卤。將已進入暫存區(qū)管理的文件上傳到本地倉庫忍抽,這是一個離線操作。
git commit -m <message>:將暫存區(qū)的文件上傳到本地倉庫董朝,<message>的位置填寫本次提交修改的內(nèi)容和一些注釋鸠项。
2.5 將本地倉庫提交到遠程倉庫(Remote)
代碼提交到遠程倉庫的最后一步!將本地倉庫新的記錄子姜,提交到遠程倉庫祟绊,這樣小伙伴就可以下載到已提交的代碼了。
git push <remote><branch>:將本地倉庫新記錄提交到遠程倉庫哥捕,<remote>位置填寫遠程倉庫名稱牧抽,<branch>填寫遠程倉庫需要提交的分支。
走完了以上四步扭弧,大家基本上就學(xué)會提交代碼了阎姥。
3.關(guān)于協(xié)作
在公司工作不可能不涉及到協(xié)作,許多人操縱同一份代碼只提交代碼并不能解決全部問題鸽捻。之前明白了如何提交代碼呼巴,現(xiàn)在講解下有關(guān)協(xié)作的重要的命令。
3.1 拉取遠程倉庫(Remote)代碼到本地倉庫(Repository)
在協(xié)作中小伙伴寫了代碼上傳到遠程倉庫御蒲,需要我們手動去拉取代碼衣赶。
git pull <remote><branch>:從遠程倉庫拉取代碼到本地倉庫,<remote>位置填寫遠程倉庫名稱厚满,<branch>填寫拉取遠程倉庫的分支府瞄。
將代碼提交到遠程倉庫之前,最好先拉取一下遠程代碼,小伙伴們的最新代碼遵馆,以免產(chǎn)生沖突鲸郊。
3.2 分支(branch)
分支是一個很重要的概念,在合作中有可能會有并行開發(fā)的需求货邓,但可能不會同時上線秆撮,不能把沒有開發(fā)完成的分支上線,所以就出現(xiàn)了分支(branch)换况。
分支的功能:從同一份穩(wěn)定代碼拉出有相同代碼的分支职辨,每個人在自己的分支上開發(fā)提交代碼,不會互相打擾戈二,完成后再進行代碼的合并舒裤。
git branch:列出所有本地分支
git branch -r:列出所有遠程分支
git branch -a:列出所有本地分支和遠程分支
git branch <branch-name>:新建一個分支,但依然停留在當(dāng)前分支觉吭,<branch-name>為新建的分支名
git checkout -b <branch-name>:新建一個分支腾供,并切換到該分支,<branch-name>為新建的分支名
git checkout <branch-name>:切換到指定分支亏栈,并更新工作區(qū)台腥,<branch-name>為指定的分支名
git branch -d <branch-name>:刪除分支宏赘,<branch-name>為指定的分支名
git push origin --delete <branch-name>:刪除遠程分支绒北,<branch-name>為指定的分支名
git push origin <branch-name>:將當(dāng)前分支上傳到遠程倉庫,<branch-name>為新建的遠程分支名
分支的命令看起來很多察署,但其實都不復(fù)雜闷游,可以敲著玩一下。
3.3 合并分支代碼(merge)
如果完成了開發(fā)需要合并贴汪,那就輪到merge出場了脐往!合并之前確保要合并的兩個分支都是當(dāng)前分支的最新代碼(pull一下)。然后切換到要保存合并代碼的分支扳埂。
git merge <branch-name>:合并指定分支到當(dāng)前分支业簿,<branch-name>是指定分支,將該分支代碼合并到當(dāng)前分支阳懂。
合并完成后可能會出現(xiàn)沖突梅尤,分支會變成 xxxx|MERGING 狀態(tài),可能兩個分支都修改了同一個文件的某一段代碼岩调,就需要我們?nèi)肆μ幚硭麄兞恕?br>
處理完成后重新commit一下缰揪,就會恢復(fù)到正常狀態(tài)。
4.其他操作
4.1 Git常用命令速查表
這是剛開始學(xué)習(xí)使用Git就保留的圖葱淳,分享給大家钝腺。建議大家先不要使用GUI去操作抛姑,先敲命令行才會明白自己在做的是什么,更容易掌握Git艳狐。
4.2 大手的入門文章
《一篇文章途戒,教你學(xué)會Git》
分享給大家,寫的比較全面僵驰,看完會更加深入理解喷斋。
5.Gitflow工作流
首先為什么要學(xué)習(xí)Gitflow,之前咱們學(xué)會了各種分支提交合并等等還不行嗎蒜茴?答案是:對星爪!還不行!粉私!因為一旦項目人數(shù)變多顽腾,并行開發(fā)的功能多了,免不了各種合并問題和沖突诺核,各種不規(guī)范的合并就像破窗戶越破越大抄肖,最后變得無可救藥。
5.1 Gitflow概念
Git Flow是構(gòu)建在Git之上的一個組織軟件開發(fā)活動的模型窖杀,是在Git之上構(gòu)建的一項軟件開發(fā)最佳實踐漓摩。Git Flow是一套使用Git進行源代碼管理時的一套行為規(guī)范和簡化部分Git操作的工具。Git Flow重點解決的是由于源代碼在開發(fā)過程中的各種沖突導(dǎo)致開發(fā)活動混亂的問題入客。因此管毙,Git flow可以很好的于各種現(xiàn)有開發(fā)模型相結(jié)合使用。
5.2 Gitflow圖解
看起來發(fā)懵桌硫?沒事夭咬,咱們來縷一縷。
Git Flow模型中定義了主分支和輔助分支兩類分支铆隘。其中主分支用于組織與軟件開發(fā)卓舵、部署相關(guān)的活動;輔助分支組織為了解決特定的問題而進行的各種開發(fā)活動膀钠。
5.3 Gitflow的主分支
主分支是所有開發(fā)活動的核心分支掏湾。所有的開發(fā)活動產(chǎn)生的輸出物最終都會反映到主分支的代碼中。主分支分為master分支和development分支托修。
-
5.3.1 master分支
只存線上的代碼忘巧,只有確定可以上線時的才合并到master上,并且在master的基礎(chǔ)上打Tag睦刃。
比如砚嘴,上線了1.0版本,那就將代碼提交到master上,并打Tag命名為1.0际长。
-
5.3.2 develop分支
初次創(chuàng)建develop時耸采,需要從master分支拉取,保持開發(fā)時代碼和線上最新的代碼相同工育。develop分支是在開發(fā)時的最終分支虾宇,具有所有當(dāng)前版本需要上線的所有功能。
比如:當(dāng)我們和小伙伴在自己創(chuàng)建的feature分支(開發(fā)功能分支如绸,后面講)開發(fā)完不同的需求嘱朽,需要合并測試,那這時就需要將所有的feature分支合并到develop上怔接。然后再提交測試搪泳,一起在develop上修改Bug。
5.4 Gitflow的輔助分支
輔助分支是用于組織解決特定問題的各種軟件開發(fā)活動的分支扼脐。輔助分支主要用于組織軟件新功能的并行開發(fā)岸军、簡化新功能開發(fā)代碼的跟蹤、輔助完成版本發(fā)布工作以及對生產(chǎn)代碼的缺陷進行緊急修復(fù)工作瓦侮。這些分支與主分支不同艰赞,通常只會在有限的時間范圍內(nèi)存在。
輔助分支包括:
1.用于開發(fā)新功能時所使用的feature分支肚吏;
2.用于輔助版本發(fā)布的release分支方妖;
3.用于修正生產(chǎn)代碼中的缺陷的hotfix分支。
-
5.4.1 feature分支
- 用于開發(fā)功能的分支须喂,必須從最新的develop分支代碼拉取吁断。分支命名基本上是feature/xxxxx(和功能相關(guān)的名字)。
- 不強制提交到遠程倉庫坞生,可以本地創(chuàng)建。
- 比如掷伙,我要開發(fā)登錄功能是己,我從develop分支的最新代碼創(chuàng)建新分支命名為feature/login,然后切換到這個新分支開始開發(fā)任柜。開發(fā)完成后卒废,測試差不多完成,合并到develop分支宙地。
-
5.4.2 release分支
- 當(dāng)develop分支已經(jīng)有了本次上線的所有代碼的時候摔认,并且以通過全部測試的時候,可以從develop分支創(chuàng)建release分支了宅粥,release分支是為發(fā)布新的產(chǎn)品版本而設(shè)計的参袱。
- 通過在release分支上進行這些工作可以讓develop分支空閑出來以接受新的feature分支上的代碼提交,進入新的軟件開發(fā)迭代周期。
- 在這個分支上的代碼允許做小的缺陷修正抹蚀、準備發(fā)布版本所需的各項說明信息(版本號剿牺、發(fā)布時間、編譯時間等等)环壤。
- 比如晒来,此次1.0版本所有的功能版本都已經(jīng)合并到了develop上,并且所有測試都已經(jīng)通過了測試郑现,那我就創(chuàng)建新的release分支release/v1.0湃崩。切換到新分支,修改最新的版本號等接箫,不允許大的更改竹习。
-
5.4.3 hotfix分支
- 當(dāng)線上出現(xiàn)bug需要緊急修復(fù)時,從當(dāng)前master分支派生hotfix分支列牺。
- 修改線上bug整陌,修改完成后合并回develop和master分鐘。
- 比如瞎领,在線上v1.0登錄功能出現(xiàn)問題泌辫,我從master拉取代碼創(chuàng)建新的分支hotfix/v1.0_login,修改完成后合并到master和develop上九默。
5.5 Gitflow小結(jié)
Git Flow開發(fā)模型從源代碼管理角度對通常意義上的軟件開發(fā)活動進行了約束震放。應(yīng)該說,為我們的軟件開發(fā)提供了一個可供參考的管理模型驼修。Git Flow開發(fā)模型讓nvie的開發(fā)代碼倉庫保持整潔殿遂,讓小組各個成員之間的開發(fā)相互隔離,能夠有效避免處于開發(fā)狀態(tài)中的代碼相互影響而導(dǎo)致的效率低下和混亂乙各。
所謂模型墨礁,在不同的開發(fā)團隊,不同的文化耳峦,不同的項目背景情況下都有可能需要進行適當(dāng)?shù)牟眉艋驍U充恩静。祝各位好運!6.結(jié)語
浩浩蕩蕩的文章終于結(jié)束了蹲坷,相信大家都想打我了驶乾,希望大家能從這篇文章中學(xué)會Git的基礎(chǔ),也能學(xué)會如何去管理自己和公司的代碼循签。在代碼合并上出現(xiàn)的慘不忍睹的現(xiàn)場真的太多了级乐。在下不才,只想把這些分享給大家和后來的人县匠。
希望我的文章能給大家?guī)硪稽c點的福利风科,那在下就足夠開心了撒轮。
下次再見!