前端面試~Git常用命令以及Commit Message編寫指南

關(guān)于git的使用在前端面試中是很常見(jiàn)的題目殷蛇,在實(shí)際工作中也經(jīng)常會(huì)用git進(jìn)行版本管理某筐,也許你了解git的相關(guān)命令和使用流程武契,git init , git add , git commit ,git push 祭往,一通操作猛如虎,然而實(shí)際工作中姆泻,我們會(huì)遇到各種意外情況圈纺,比如當(dāng)發(fā)生沖突的時(shí)候秦忿,或者需要暫時(shí)停止添加當(dāng)前進(jìn)行中的新feature開(kāi)發(fā),去修復(fù)一個(gè) bug
蛾娶,怎么保證既不影響當(dāng)前工作灯谣,又能夠順利完成臨時(shí)加派的任務(wù)呢?

實(shí)際上蛔琅, git是很強(qiáng)大的版本管理工具胎许,有必要了解實(shí)際開(kāi)發(fā)流程中需要用到的各種命令以及相應(yīng)參數(shù)的設(shè)置,這樣才能保證開(kāi)發(fā)過(guò)程有條不紊罗售,本文就對(duì)git 常用命令進(jìn)行了梳理辜窑,幫助大家理解 git原理。

一寨躁、Git 原理

1.1 工作區(qū)穆碎、暫存區(qū)和版本庫(kù)



結(jié)合上圖,首先理解下 Git 工作區(qū)职恳、暫存區(qū)和版本庫(kù)概念:

工作區(qū):就是電腦中看到的目錄
暫存區(qū)(stage/index):是一個(gè)存放在".git"目錄下的 index 文件(.git/index)所禀,暫存區(qū)有時(shí)候也叫作索引(index)
版本庫(kù):是指工作區(qū)下的一個(gè)目錄,是隱藏的放钦,這個(gè)不算工作區(qū)色徘,而是 Git 的版本庫(kù)
圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?Git 的對(duì)象庫(kù),實(shí)際位于 ".git/objects"目錄下操禀,里面包含了創(chuàng)建的各種對(duì)象及內(nèi)容:

當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時(shí)褂策,暫存區(qū)的目錄樹(shù)被更新,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中颓屑,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中

當(dāng)執(zhí)行提交操作(git commit)時(shí)斤寂,暫存區(qū)的目錄樹(shù)寫到版本庫(kù)(對(duì)象庫(kù))中,master 分支會(huì)做相應(yīng)的更新揪惦。即 master 指向的目錄樹(shù)就是提交時(shí)暫存區(qū)的目錄樹(shù)

1.2 Git 分支管理



幾乎每一種版本控制系統(tǒng)都以某種形式支持分支扬蕊。使用分支意味著你可以從開(kāi)發(fā)主線上分離開(kāi)來(lái),然后在不影響主線的同時(shí)繼續(xù)工作丹擎。

Git 的分支模型稱為她的“必殺技特性”,正因?yàn)檫@一特性歇父,使得 Git 從眾多版本控制系統(tǒng)中脫穎而出蒂培。Git 處理分支的方式是難以置信的輕量,創(chuàng)建分支以及在不同分支之間切換幾乎能在瞬間完成榜苫。與許多其他版本控制系統(tǒng)不同护戳,Git鼓勵(lì)在工作流程中頻繁地使用分支與合并,正是因?yàn)榉种Чδ艽共牵珿it 才會(huì)如此強(qiáng)大而又獨(dú)特媳荒。

理解 Git 分支抗悍,需要理解 orgin/master, master, origin的區(qū)別:
origin: 遠(yuǎn)程服務(wù)器

origin/master: 遠(yuǎn)程分支

master: 本地分支

執(zhí)行 git clone 命令之后,遠(yuǎn)程服務(wù)器會(huì)被自動(dòng)命名為 origin , 并且該命令會(huì)創(chuàng)建一個(gè)指向 master 分支的指針钳枕,該分支命名為origin/master缴渊,同時(shí)會(huì)創(chuàng)建一個(gè)名為 master 的本地分支,并且和遠(yuǎn)程分支在同一個(gè)提交節(jié)點(diǎn)鱼炒。

注意: origin并不特別,就像分支名master在git中沒(méi)有任何特殊意義一樣.當(dāng)執(zhí)行g(shù)it init時(shí),master會(huì)作為初始分支的默認(rèn)名字,因此使得master分支名被廣泛使用.而origin是執(zhí)行g(shù)it clone時(shí)的默認(rèn)服務(wù)器名稱,當(dāng)然可以通過(guò)指令git clone -o cat,使得默認(rèn)服務(wù)器名稱為cat,而默認(rèn)遠(yuǎn)程分支為cat/master.

master & origin&master
這個(gè)就很好理解了: master是默認(rèn)的本地分支衔沼,是遠(yuǎn)程分支 origin/master 在本地的拷貝

從遠(yuǎn)程分支 checkout一個(gè)本地分支,該本地分支被稱為追蹤分支 (tracking branck) 昔瞧,被追蹤的分支被稱為上游分支 (upstream branch) , 追蹤分支和遠(yuǎn)程分支相關(guān)聯(lián)指蚁,執(zhí)行 git pull命令, git會(huì)自動(dòng)獲取到需要 merge 的分支的服務(wù)器

通過(guò) git checkout -b [branch] [remotename]/[branch] 命令可以創(chuàng)建新的追蹤分支

如果已經(jīng)有一個(gè)本地分支自晰,現(xiàn)在想要關(guān)聯(lián)遠(yuǎn)程分支凝化,或者修改追蹤的上游分支,可以使用-u或者--set-upstream-to 來(lái)實(shí)現(xiàn):git branch -r origin/[your branch]

git 還提供了通用的--track 操作: git checkout --track origin/dev

那么酬荞, git checkout --track origin/dev 這個(gè)命令完成了什么呢:

1.分支 dev被設(shè)定為追蹤服務(wù)器 origin 上的遠(yuǎn)程分支dev
2.切換到 dev 分支上

除了分支操作搓劫,還有其它很多常用的git命令,一起看下吧

二袜蚕、Git 常用命令


1.查看分支

git branch // 顯示本地分支
git branch -r // 顯示遠(yuǎn)程分支
git branch -a // 顯示所有分支
復(fù)制代碼

2.創(chuàng)建分支

git branch [branch name]
復(fù)制代碼

3.切換分支

git checkout [branch name]
git checkout -b [branch name] // 若分支不存在糟把,則創(chuàng)建分支,切換到新分支上
復(fù)制代碼

4.刪除分支

git branch -d [branch name] // 刪除本地分支
git push origin --delete [branch name] // 刪除遠(yuǎn)程分支
復(fù)制代碼

5.合并分支

git merge [branch name]
復(fù)制代碼

6.將此次更新合并到上次的 commit記錄中牲剃,不添加新的commit

git commit --amend
復(fù)制代碼

7.拉取遠(yuǎn)程分支

git pull
復(fù)制代碼

8.推送到遠(yuǎn)程分支

如果遠(yuǎn)程分支上跟本地分支沒(méi)有關(guān)聯(lián)遣疯,則執(zhí)行以下命令

git push -r origin [branch name]
復(fù)制代碼

如果本地分支跟遠(yuǎn)程分支已經(jīng)關(guān)聯(lián),則運(yùn)行如下命令:

git push
復(fù)制代碼

9.查看日志

git log // 列出所有更新

---------帶參數(shù)---------
git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller

--------特定格式--------
git log --pretty=format:"%h - %an, %ar : %s"
復(fù)制代碼

git log --pretty 參數(shù)說(shuō)明:

三凿傅、Commit Message規(guī)范

git commit命令要求編寫 commit message 缠犀,不然無(wú)法提交,關(guān)于 commit message 的編寫聪舒,我們往往容易忽略規(guī)范辨液,整體來(lái)講, commit message 應(yīng)該清晰簡(jiǎn)潔箱残,能夠提現(xiàn)本次提交目的滔迈。

關(guān)于 commit message 的編寫規(guī)范,社區(qū)有很多種被辑,Angular規(guī)范 是目前使用最廣的寫法燎悍,本文就簡(jiǎn)單介紹一下。

commit message 的構(gòu)成包括三部分: Header, Body 和 Footer

<type> (<scope>): <subject>
// 空行
<body>
// 空行
<footer>
復(fù)制代碼

其中盼理, Header 是必需的谈山, BodyFooter可以省略。

注意:任何一布行都不得超過(guò) 72(或100) 個(gè)字符宏怔,避免自動(dòng)換行影響美觀

3.1 Header
Header 占一行奏路,包括三個(gè)字段: type, scope, subject
(1) type
type 用于說(shuō)明 commit 類別畴椰,只允許以下 7 個(gè)標(biāo)識(shí):

feat: 新功能 (feature)
fix: 修補(bǔ) bug
docs: 文檔 (documentation)
style: 格式 (比如去除空行)
refactor: 重構(gòu) (不是新增功能,也不是修補(bǔ)bug)
test: 增加測(cè)試
chore: 構(gòu)建過(guò)程或輔助工具的變動(dòng)

(2) scope
scope用于說(shuō)明 commit 影響的范圍鸽粉,比如數(shù)據(jù)層斜脂、控制層、視圖層等等(很少用到)

(3) subject
描述本次提交的目的潜叛,不超過(guò) 50 個(gè)字符

以動(dòng)詞開(kāi)頭秽褒,使用第一人稱現(xiàn)在時(shí),比如change威兜,而不是 changed 或 changes
第一個(gè)字母小寫
結(jié)尾不加句號(hào)
3.2 Body
Body 部分是對(duì)本次 commit 的詳細(xì)描述销斟,可以分為多行描述,要求使用第一人稱現(xiàn)在時(shí)椒舵,說(shuō)明代碼變動(dòng)原因以及前后行為對(duì)比蚂踊。

3.3 Footer

Footer只適用于兩種情況:

(1) 不兼容變動(dòng)
當(dāng)前代碼與上一個(gè)版本不兼容,則Footer部分以BREAKING CHANGE 開(kāi)頭笔宿,后面是對(duì)變動(dòng)的描述犁钟、變動(dòng)理由和遷移方法

BREAKING CHANGE: isolate scope bindings definition has changed.

    To migrate the code follow the example below:

    Before:

    scope: {
      myAttr: 'attribute',
    }

    After:

    scope: {
      myAttr: '@',
    }

    The removed `inject` wasn't generaly useful for directives so there should be no code using it.
復(fù)制代碼

(2) 關(guān)閉Issue
如果當(dāng)前 commit針對(duì)某個(gè)issue ,那么可以在Footer 部分關(guān)閉這個(gè) issue

Closes #123, #234, #345
復(fù)制代碼

寫在最后:

本文介紹了 Git 的工作原理泼橘、常用命令以及 commit message規(guī)范涝动,希望能對(duì)你的工作有些幫助

下面這個(gè)是一些大企業(yè)的大佬整理出來(lái)的,認(rèn)真地和他們學(xué)習(xí)了很多經(jīng)驗(yàn)以及獲取了很多直觀的資料炬灭,現(xiàn)在全部拿出來(lái)奉獻(xiàn)給大家醋粟!想系統(tǒng)學(xué)習(xí)前端web的朋友,我都整理在文件中了重归,可以這邊的交流裙前面114中間6649后面671米愿,資源給大家拉滿,不見(jiàn)不散哦鼻吮!


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末育苟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椎木,更是在濱河造成了極大的恐慌违柏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件香椎,死亡現(xiàn)場(chǎng)離奇詭異漱竖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)士鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谆级,“玉大人烤礁,你說(shuō)我怎么就攤上這事讼积。” “怎么了脚仔?”我有些...
    開(kāi)封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵勤众,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鲤脏,道長(zhǎng)们颜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任猎醇,我火速辦了婚禮窥突,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硫嘶。我一直安慰自己阻问,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布沦疾。 她就那樣靜靜地躺著称近,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哮塞。 梳的紋絲不亂的頭發(fā)上刨秆,一...
    開(kāi)封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音忆畅,去河邊找鬼衡未。 笑死,一個(gè)胖子當(dāng)著我的面吹牛邻眷,可吹牛的內(nèi)容都是我干的眠屎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肆饶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛹尝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起髓绽,我...
    開(kāi)封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒穷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后板惑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體橄镜,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年冯乘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洽胶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裆馒,死狀恐怖姊氓,靈堂內(nèi)的尸體忽然破棺而出丐怯,到底是詐尸還是另有隱情,我是刑警寧澤翔横,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布读跷,位于F島的核電站,受9級(jí)特大地震影響禾唁,放射性物質(zhì)發(fā)生泄漏效览。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一荡短、第九天 我趴在偏房一處隱蔽的房頂上張望丐枉。 院中可真熱鬧,春花似錦肢预、人聲如沸矛洞。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沼本。三九已至,卻和暖如春锭沟,著一層夾襖步出監(jiān)牢的瞬間抽兆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工族淮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫红,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓祝辣,卻偏偏與公主長(zhǎng)得像贴妻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝙斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355