代碼管理——學(xué)會Git和Gitflow工作流

前言

大家好!在下游回來了优妙!不啰嗦快進正題套硼!
本篇文章是面對剛開始接觸Git的新手邪意,所講命令并不全反砌,在文章結(jié)束會放入各路大手的比較全面的文章宴树,有興趣繼續(xù)學(xué)習(xí)的同學(xué)可以看下酒贬。

工作時大家可能有這種感受锭吨,部門里的開發(fā)越來越多零如,并行開發(fā)的需求也越來越多,代碼版本的管理就越來越復(fù)雜御滩,沖突會越來越多芥被。所以急需一個成熟的代碼管理工具來管理籽腕,現(xiàn)在市面上主要使用的是Git矛紫、SVN颊咬。

本篇文章將以操作步驟的方式喳篇,帶大家一步步的學(xué)會Git麸澜。學(xué)會了如何提交倉庫炊邦,再學(xué)習(xí)下Gitflow馁害,進一步規(guī)范代碼管理蜗细!

強烈推薦初學(xué)者手敲Git指令炉媒,知道自己在做什么吊骤。

目錄

  1. 概念
  2. 提交代碼
    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)
  3. 關(guān)于協(xié)作
    3.1 拉取遠程倉庫(Remote)代碼到本地倉庫(Repository)
    3.2 分支(branch)
    3.3 合并分支代碼(merge)
  4. 其他操作
    4.1 Git常用命令速查表
    4.2 大手的入門文章
  5. 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é)
  6. 結(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 小提示:

  1. 該節(jié)會從項目創(chuàng)建(或從遠程倉庫下載)開始翎承,直到代碼提交到遠程倉庫所有的步驟硕盹,建議讀者跟著敲一下叨咖,熟能生巧瘩例。

  2. 讀者需要安裝好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ū)颜骤,已提交到本地倉庫的不會展示。

未進入暫存區(qū)
已進入暫存區(qū)

2.4 將暫存區(qū)文件提交到本地倉庫(Repository)

代碼提交到遠程倉庫的第二步捣卤。將已進入暫存區(qū)管理的文件上傳到本地倉庫忍抽,這是一個離線操作。

git commit -m <message>:將暫存區(qū)的文件上傳到本地倉庫董朝,<message>的位置填寫本次提交修改的內(nèi)容和一些注釋鸠项。

提交本地倉庫

2.5 將本地倉庫提交到遠程倉庫(Remote)

代碼提交到遠程倉庫的最后一步!將本地倉庫新的記錄子姜,提交到遠程倉庫祟绊,這樣小伙伴就可以下載到已提交的代碼了。

git push <remote><branch>:將本地倉庫新記錄提交到遠程倉庫哥捕,<remote>位置填寫遠程倉庫名稱牧抽,<branch>填寫遠程倉庫需要提交的分支。

推送到遠程origin倉庫的master分支

走完了以上四步扭弧,大家基本上就學(xué)會提交代碼了阎姥。

3.關(guān)于協(xié)作

在公司工作不可能不涉及到協(xié)作,許多人操縱同一份代碼只提交代碼并不能解決全部問題鸽捻。之前明白了如何提交代碼呼巴,現(xiàn)在講解下有關(guān)協(xié)作的重要的命令。

3.1 拉取遠程倉庫(Remote)代碼到本地倉庫(Repository)

在協(xié)作中小伙伴寫了代碼上傳到遠程倉庫御蒲,需要我們手動去拉取代碼衣赶。

git pull <remote><branch>:從遠程倉庫拉取代碼到本地倉庫,<remote>位置填寫遠程倉庫名稱厚满,<branch>填寫拉取遠程倉庫的分支府瞄。

拉取遠程origin倉庫的master分支到本地倉庫

將代碼提交到遠程倉庫之前,最好先拉取一下遠程代碼,小伙伴們的最新代碼遵馆,以免產(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)前分支阳懂。

將master分支代碼合并到develop上

合并完成后可能會出現(xiàn)沖突梅尤,分支會變成 xxxx|MERGING 狀態(tài),可能兩個分支都修改了同一個文件的某一段代碼岩调,就需要我們?nèi)肆μ幚硭麄兞恕?br>

刪除錯誤代碼巷燥,保留正確的代碼,記得把 "<<<<< HEAD号枕,======" 刪除

處理完成后重新commit一下缰揪,就會恢復(fù)到正常狀態(tài)。

4.其他操作

4.1 Git常用命令速查表

git常用命令.jpg

這是剛開始學(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圖解

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际长。

    master分支

  • 5.3.2 develop分支
    初次創(chuàng)建develop時耸采,需要從master分支拉取,保持開發(fā)時代碼和線上最新的代碼相同工育。develop分支是在開發(fā)時的最終分支虾宇,具有所有當(dāng)前版本需要上線的所有功能。
    比如:當(dāng)我們和小伙伴在自己創(chuàng)建的feature分支(開發(fā)功能分支如绸,后面講)開發(fā)完不同的需求嘱朽,需要合并測試,那這時就需要將所有的feature分支合并到develop上怔接。然后再提交測試搪泳,一起在develop上修改Bug。

    feature合并到develop分支

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分支宙地。
創(chuàng)建feature/login流程
  • 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湃崩。切換到新分支,修改最新的版本號等接箫,不允許大的更改竹习。
release操作步驟
  • 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上九默。
hotfix分支操作

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點的福利风科,那在下就足夠開心了撒轮。
下次再見!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丐重,一起剝皮案震驚了整個濱河市腔召,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扮惦,老刑警劉巖臀蛛,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崖蜜,居然都是意外死亡浊仆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門豫领,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抡柿,“玉大人,你說我怎么就攤上這事等恐≈蘖樱” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵课蔬,是天一觀的道長囱稽。 經(jīng)常有香客問我,道長二跋,這世上最難降的妖魔是什么战惊? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扎即,結(jié)果婚禮上吞获,老公的妹妹穿的比我還像新娘。我一直安慰自己谚鄙,他們只是感情好各拷,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著襟锐,像睡著了一般撤逢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粮坞,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音初狰,去河邊找鬼莫杈。 笑死,一個胖子當(dāng)著我的面吹牛奢入,可吹牛的內(nèi)容都是我干的筝闹。 我是一名探鬼主播媳叨,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼关顷!你這毒婦竟也來了糊秆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤议双,失蹤者是張志新(化名)和其女友劉穎痘番,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體平痰,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡汞舱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宗雇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昂芜。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赔蒲,靈堂內(nèi)的尸體忽然破棺而出泌神,到底是詐尸還是另有隱情,我是刑警寧澤舞虱,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布欢际,位于F島的核電站,受9級特大地震影響砾嫉,放射性物質(zhì)發(fā)生泄漏幼苛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一焕刮、第九天 我趴在偏房一處隱蔽的房頂上張望舶沿。 院中可真熱鬧,春花似錦配并、人聲如沸括荡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畸冲。三九已至,卻和暖如春观腊,著一層夾襖步出監(jiān)牢的瞬間邑闲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工梧油, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苫耸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓儡陨,卻偏偏與公主長得像褪子,于是被迫代替她去往敵國和親量淌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容