GIT-從文件生命周期看提交流程

git_logo.png

簡書不維護了赫舒,歡迎關注我的知乎:波羅學的個人主頁

GIT的上一篇文章比較枯燥無味蚤霞,理論性較強镣煮,也是難以引起共鳴!今天從實在操作方面說一下GIT使用中悉盆,使用最多的流程-提交到倉庫盯荤。

開始說明提交流程之前,先看一下上篇提到的GIT整體架構圖焕盟。

git_structure.png

對秋秤!還是這張畫的比較丑的圖![捂臉]京髓!
本章說的內容是上面這張圖的前面部分航缀,如下:

git_add_commit.png

只有提交本地倉庫的流程商架,并沒有涉及到遠程倉庫堰怨。關于提交流程,常用的命令:add和commit蛇摸,add負責提交到暫存區(qū)备图,commit提交到倉庫。但并不是只有這兩個命令就足夠了赶袄。下面開始正文揽涮。

一 準備你的環(huán)境

操作系統(tǒng):centos7
GIT版本:git version 1.8.3.1

在開始之前,我們先需要做一些初始化工作饿肺。

1. 配置環(huán)境

提交git倉庫蒋困,需要做兩個基本的配置操作:

$ git config --global user.name poloxue
$ git config --global user.email peitiang@163.com

配置你的姓名與郵箱地址。關于git配置還有很多內容敬辣,本章內容重點不在于此雪标,就不作過多詳解。

2. 準備倉庫

首先我們需要一個git倉庫溉跃,兩個命令可以實現(xiàn): init 和 clone村刨。

a. git init
init是通過初始化本地目錄的方式創(chuàng)建倉庫。
首先撰茎,創(chuàng)建一個測試的文件夾嵌牺。
執(zhí)行初始化操作,查看文件夾變化

git_init.png

此時倉庫文件夾下多出了一個.git的文件龄糊,上面一節(jié)對.git有過簡單說明逆粹。我們的暫存區(qū)和本地倉庫就是存在于這個文件下面。

b. git clone
clone通過遠程克隆方式獲取版本庫炫惩。本人剛開始使用git的時候枯饿,以為git像svn一樣需要依賴遠程,獲取倉庫首先想到的是去github上面clone诡必。clone使用很簡單: git clone 倉庫地址奢方。

git_clone.png

二 提交流程

文章標題為從文件生命周期看提交流程搔扁,首先一個文件在整個生命周期可能存在哪些狀態(tài),如下:

1.未追蹤 untracked file
2.已暫存 staged file
3.未更新 no updated file
4.已更新 updated file

還是先動手畫個圖蟋字,如下:


git_record_process.png

上面的圖以文件狀態(tài)的角度出發(fā)稿蹲,指出了一個文件從創(chuàng)建到提交文件倉庫再到脫離倉庫追蹤的整個過程可能經歷的各種狀態(tài)。

在開始正文之前先介紹一下GIT查看倉庫中文件狀態(tài)的命令:git status鹊奖。如果倉庫文件有所變化苛聘,執(zhí)行此命令可以查看各個變化文件狀態(tài)。

1. 未追蹤

在工作目錄下新創(chuàng)建的一個文件初始狀態(tài)處于未追蹤忠聚。此時文件不受版本系統(tǒng)的控制设哗。

下面在我們之前初始化為git倉庫的experiment的工作目錄,新建一個README.md两蟀。然后隨意輸入一些內容网梢。使用git status查看一下當前倉庫狀態(tài),如下:


git_status.png

此時READM.md為untracked file赂毯,下面提示 Use "git add <file>..." to include in what will be committed战虏,即為使用git add命令去添加將被提交的文件。似乎沒有說明怎么追蹤文件党涕,繼續(xù)看烦感,如需要被追蹤 use "git add" to track, 意為使用git add追蹤文件。

2. 已更新

為了下面的內容更方便講解膛堤,先來說說文件的已更新狀態(tài)手趣。

啥叫已更新呢?個人總結肥荔,上圖中把文件的三種情況都歸于已更新:編輯更新绿渣,沖突更新,刪除更新次企。下面從這三種更新的角度來談談怯晕,看看這些更新狀態(tài)如何產生。

a. 編輯更新
編輯更新就是因我們修改文件而導致的更新缸棵。下面看下如何產生一個編輯更新狀態(tài)的文件舟茶。

首先,快速通過以下三步添加一個新文件modify.php到版本庫中堵第。

$ touch modify.php
$ git add modify.php
$ git commit -m "new file modify.php"

下面我們修改文件modify.php吧凉,添加任意內容修改,git status查看狀態(tài):


git_modify.png

可以看到此時踏志,modify文件處于modified狀態(tài)阀捅。我們使用git時,大多數更新都是屬于這種類型针余。

b. 沖突更新
沖突更新是怎么產生的呢饲鄙?我們知道GIT支持強大的分支功能凄诞,前面說明GIT的優(yōu)點也提到了這個問題。但是分支就會有一個問題忍级,兩個分支同時修改同一文件的同一部分內容帆谍,沖突就產生了。下面演示這種類型的更新如何產生轴咱?

首先汛蝙,快速通過以下三步添加一個新文件conflict.php到版本庫中。

$ touch conflict.php
$ git add conflict.php
$ git commit -m "new file conflict.php"

創(chuàng)建兩個分支:feature

$ git branch feature

在master上conflict.php添加內容: master
在feature上conflict.php添加內容: feature
在master執(zhí)行合并操作:

$ git merge feature
git_conflict.png

可以看到朴肺,沖突就是這么容易就產生了窖剑。團隊合作開發(fā)時,沖突更新也是我們平時最不喜歡遇到的戈稿,如果沖突的內容都是自己的西土,那還好處理。如果涉及了大量的人員器瘪,這其中就會有大量的溝通成本翠储。

c. 刪除更新
刪除也算更新绘雁,這個邏輯理解起來有點怪橡疼。但刪除畢竟改變了文件內容,讓文件不存在了庐舟,所以也算更新[苦笑不得]欣除。這種更新如何產生呢?

首先挪略,快速通過以下三步添加一個新文件delete.php到版本庫中历帚。

$ touch delete.php
$ git add delete.php
$ git commit -m "new file delete.php"

提交之后,手動刪除delete.php文件

$ rm delete.php
git_delete.png

此時杠娱,delete.php文件狀態(tài)便是刪除更新的狀態(tài)挽牢。

3. 已暫存

在上面的1、2兩段摊求,關于未追蹤和已更新禽拔,總結的是工作區(qū)文件存在的各種狀態(tài)。但是在把文件提交到版本之前室叉,還需要中間的一個過渡階段:暫存區(qū)睹栖。文件提交到暫存區(qū)便是已暫存狀態(tài)〖牒郏看上面文件各個狀態(tài)之間的轉化圖野来,我們知道文件可以由未跟蹤和已更新兩種狀態(tài)轉化而來。

由之前的操作踪旷,現(xiàn)在已經有了各種狀態(tài)的文件:

1. 未追蹤文件:README.md
2. 編輯更新文件:modify.php
3. 沖突更新文件:conflict.php
4. 刪除更新文件:delete.php

下面如何使用git add將這些文件添加到暫存區(qū):

git add -A 最省事曼氛,所有文件添加到暫存區(qū)豁辉;
git add -u 已更新文件添加暫存區(qū),即modify.php conflict.php delete.php舀患;
git add . 將除刪除更新的其他文件加到暫存區(qū)秋忙,即README.md modify.php conflict.php;
git add * 會忽略.gitignore規(guī)則构舟,把本來應忽略文件添加暫存區(qū)灰追,慎用;

當不確定時狗超,可直接添加某文件git add filepath;

$ git add modify.php;

刪除更新也可以使用git rm命令弹澎,直接將刪除文件提交到暫存區(qū)同時刪除文件,如需刪除提交暫存區(qū)但工作區(qū)文件保留可使用選項--cached:

$ git rm delete.php
$ git rm delete.php --cached

好努咐!下面把所有文件提交到暫存區(qū):

$ git add -A

此時苦蒿,git status查看文件狀態(tài):


git_stash_all.jpeg

因為同時存在刪除和新建,delete.php被認為rename為README.md渗稍,不深究了佩迟,正常情況工作區(qū)文件狀態(tài)與暫存區(qū)的對應關系如下:

工作區(qū) 暫存區(qū)
untracked new file
modified modified
both modified modified
deleted deleted

4. 未更新

怎么讓文件轉化為未更新狀態(tài)呢?提交倉庫竿屹!我們已經把所有內容提交暫存报强,下面可以借助于commit命令進行倉庫提交:

a. 常用方式
提交倉庫的常用,執(zhí)行如下命令:
$ git commit -m "feat: new function"
再查看文件狀態(tài)拱燃,發(fā)現(xiàn)已經沒有內容可以提交秉溉,此時倉庫處于未更新的狀態(tài)。

b. 編輯更新直接提交到倉庫
git commit -am "message"可以將編輯更新直接從工作區(qū)提交倉庫碗誉,即跨過暫存區(qū)召嘶。不支持刪除與沖突更新和新文件的提交。

c. 提交修訂
如提交有誤哮缺,支持對當前提交進行修訂弄跌。

$ git commit --amend

一是可用來修改提交日志;
二是用來提交漏掉文件尝苇,仍保持為一個提交铛只。

本文主要從GIT文件的生命周期來看整個提交流程。為了便于理解茎匠,自己總結了編輯更新格仲、刪除更新、沖突更新幾個新詞诵冒,希望不會造成誤解凯肋。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市汽馋,隨后出現(xiàn)的幾起案子侮东,更是在濱河造成了極大的恐慌圈盔,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悄雅,死亡現(xiàn)場離奇詭異驱敲,居然都是意外死亡,警方通過查閱死者的電腦和手機宽闲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門众眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人容诬,你說我怎么就攤上這事娩梨。” “怎么了览徒?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵狈定,是天一觀的道長。 經常有香客問我习蓬,道長纽什,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任躲叼,我火速辦了婚禮芦缰,結果婚禮上,老公的妹妹穿的比我還像新娘押赊。我一直安慰自己饺藤,他們只是感情好包斑,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布流礁。 她就那樣靜靜地躺著,像睡著了一般罗丰。 火紅的嫁衣襯著肌膚如雪神帅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天萌抵,我揣著相機與錄音找御,去河邊找鬼。 笑死绍填,一個胖子當著我的面吹牛霎桅,可吹牛的內容都是我干的。 我是一名探鬼主播讨永,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼滔驶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卿闹?” 一聲冷哼從身側響起揭糕,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤萝快,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后著角,有當地人在樹林里發(fā)現(xiàn)了一具尸體揪漩,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年吏口,在試婚紗的時候發(fā)現(xiàn)自己被綠了奄容。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡产徊,死狀恐怖嫩海,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情囚痴,我是刑警寧澤叁怪,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站深滚,受9級特大地震影響奕谭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜痴荐,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一血柳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧生兆,春花似錦难捌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至合蔽,卻和暖如春击敌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拴事。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工沃斤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刃宵。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓衡瓶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牲证。 傳聞我的和親對象是個殘疾皇子哮针,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容