用Git進(jìn)行版本控制(四)向倉庫中添加commit

前言:
教程來源于Udacity的免費(fèi)教程-用Git進(jìn)行版本控制刃泡,這里僅是個(gè)人的筆記,參考使用赞别。

image.png

git add:
將文件從工作目錄添加到暫存區(qū)中焦履。
git commit:
將文件從暫存區(qū)中取出贸典,并存儲(chǔ)到倉庫(repo)中视卢。即實(shí)際要提交的地方
git diff:
可以顯示兩個(gè)版本之間的代碼差異。與git log -p輸出的內(nèi)容是一致的廊驼。

*這里的add和commit和SVN里的概念是一樣的

移至正確的項(xiàng)目

如果你一直跟著操作据过,那么現(xiàn)在你的計(jì)算機(jī)中,應(yīng)該在兩個(gè)目錄下有 git 項(xiàng)目:

new-git-project - 使用 git init 轉(zhuǎn)換為 git 倉庫的空目錄

course-git-blog-project - 使用 git clone 獲得的現(xiàn)有博客項(xiàng)目

為了避免與已有的 commit 產(chǎn)生混淆妒挎,我們將向 new-git-project 倉庫提交 commit绳锅。

在終端上,確保使用 cd 命令轉(zhuǎn)到 new-git-project 目錄中酝掩。如果你沒有 new-git-project 目錄鳞芙,現(xiàn)在創(chuàng)建一個(gè)。位于該目錄中后,運(yùn)行 git init 命令原朝。如果你之前已經(jīng)運(yùn)行了 git init驯嘱,沒關(guān)系。多次運(yùn)行 git init 不會(huì)導(dǎo)致任何問題喳坠,因?yàn)樗皇侵匦鲁跏蓟?Git 目錄鞠评。

切換到new-git-project下:
cd
cd new-git-project

image.png

git status 輸出總結(jié)
以下是輸出:

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)
注意最后一行 – nothing to commit (create/copy files and use "git add" to track)。注意到它推薦使用的 git add 命令了嗎壕鹉?這很有幫助剃幌!git status 的輸出結(jié)果將給出下一步應(yīng)該怎么做的建議或提示。

我們根據(jù)反饋的建議操作晾浴,并創(chuàng)建一些文件锥忿。

創(chuàng)建 HTML 文件
首先,創(chuàng)建一個(gè)叫做 index.html 的文件怠肋,并添加一些起始代碼:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Blog Project</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <link rel="stylesheet" href="css/app.css">
</head>
<body>

    <script src="js/app.js"></script>
</body>
</html>

注意,代碼引用了 CSS 文件和 JavaScript 文件淹朋。

現(xiàn)在創(chuàng)建這些 CSS 和 JavaScript 文件笙各。你可以讓這兩個(gè)文件留空。稍后我們將向文件中添加內(nèi)容础芍。

image.png

整體回顧
很酷吧杈抢?我們尚未對(duì) git 執(zhí)行任何特殊操作,但是它已經(jīng)在觀察這個(gè)目錄(因?yàn)樗?git 項(xiàng)目)仑性,并且知道我們創(chuàng)建了幾個(gè)新的文件惶楼。git status 命令的輸出同樣十分簡(jiǎn)潔地告訴我們 git 沒有跟蹤這些文件。

我們快速回顧一下正在進(jìn)行的操作以及將要執(zhí)行的操作:

我們新建了幾個(gè)希望 git 開始跟蹤的文件

為了讓 git 能跟蹤文件诊杆,需要將該文件提交到倉庫中

要提交文件歼捐,需要將該文件放入暫存區(qū)

可以使用 git add 命令將文件從工作目錄移到暫存區(qū)

工作目錄中目前有三個(gè)未跟蹤文件

index.html

css 目錄下的 app.css

js 目錄下的 app.js

要將所有文件提交到倉庫中,首先需要將這些文件從工作目錄移到暫存區(qū)晨汹。我們將使用 git add 命令將這三個(gè)文件移到暫存區(qū)豹储。

image.png

暫存文件
是時(shí)候行動(dòng)了!在終端上運(yùn)行以下命令淘这,使用 git add 將 index.html 添加到暫存區(qū):

$ git add index.html
注意:我們僅添加了 index.html 文件剥扣。稍后我們將添加 CSS 和 JavaScript 文件。

image.png

Changes to be committed
輸出結(jié)果中現(xiàn)在出現(xiàn)了全新的區(qū)域:"Changes to be committed"區(qū)域铝穷!這一新的"Changes to be committed"區(qū)域顯示了位于暫存區(qū)的文件钠怯!目前只顯示了 index.html 文件,因此暫存區(qū)只有這個(gè)文件曙聂。繼續(xù)這一思路晦炊,如果我們現(xiàn)在提交 commit,則只有 index.html 文件會(huì)被提交。

提示:你注意到"Changes to be committed"下方的幫助文本了嗎刽锤?它提示 (use "git rm --cached <file>..." to unstage)镊尺,也就是當(dāng)你不小心運(yùn)行了 git add 并提供了錯(cuò)誤文件,它會(huì)提示你應(yīng)該怎么操作并思。

順便提下庐氮,git rm --cached 與 shell 的 rm 命令不同。git rm --cached 不會(huì)破壞任何屬于你的文件宋彼,它只是從暫存區(qū)刪掉了文件弄砍。

image.png

如果我們誤添加了一文件,我們可以使用
git rm --cache file name
來將文件從暫存區(qū)(staging)中移出

暫存剩余的文件

index.html 文件已暫存输涕。我們?cè)贂捍媪硗鈨蓚€(gè)文件∫羯簦現(xiàn)在我們可以運(yùn)行以下命令:

$ git add css/app.css js/app.js
但是要輸入的內(nèi)容好多啊。我們可以使用一個(gè)特殊的命令行字符:

句點(diǎn) .
句點(diǎn)指代當(dāng)前目錄莱坎,可以用來表示所有文件和目錄(包括所有嵌套文件和目錄R率健)。

  $ git add css/app.css js/app.js
  # 等同于
  $ git add .

唯一要注意的是檐什,你可能會(huì)不小心包含多余的文件〔晡裕現(xiàn)在,我們希望同時(shí)暫存 css/app.css 和 js/app.js乃正,因此運(yùn)行該命令沒問題∽〔幔現(xiàn)在假設(shè)你向 img 目錄添加了一些圖片,但是暫時(shí)不想暫存這些圖片瓮具。運(yùn)行 git add . 將暫存這些圖片荧飞。如果你暫存了不想暫存的文件,git status 會(huì)告訴你撤消暫存需要用到的命令名党。

暫存剩余的文件
我們使用以下簡(jiǎn)寫命令暫存剩余的文件:

$ git add .
然后運(yùn)行 git status:

image.png

git add 小結(jié)
git add 命令用于將文件從工作目錄移到暫存區(qū)叹阔。

$ git add <file1> <file2> … <fileN>
此命令:

可接受多個(gè)文件名(用空格分隔)

此外,可以使用句點(diǎn) . 來代替文件列表传睹,告訴 git 添加當(dāng)前目錄至?xí)捍鎱^(qū)(以及所有嵌套文件)

提交 Commit
我們開始提交吧条获!

要在 git 中提交 commit,你需要使用 git commit 命令蒋歌,但是先別運(yùn)行這條命令帅掘。運(yùn)行這條命令將會(huì)打開你在第一節(jié)課配置的代碼編輯器。如果你尚未運(yùn)行以下命令:

$ git config --global core.editor <your-editor's-config-went-here>
回到 git 配置步驟并讓 git 使用你所選的編輯器堂油。

我這里使用的vim編輯器修档,也可以使用其它的,參考用Git進(jìn)行版本控制(一)配置中有具體的說明府框。

輸入 git commit 會(huì)打開配置好的編輯器吱窝。

類似下面這樣:(我給提前了,忘記截圖)

image.png

第一段精確地告訴了我們需要執(zhí)行的操作 - 我們需要為該 commit 提供一條消息。此外 院峡,任何以字符 # 開頭的行將被忽略兴使。在后面還提示:這將是初始 commit。最后照激,給出了將提交 commit 的文件列表发魄。

我們需要添珈一條“commit消息說明”即可。

image.png

如果是VIM俩垃,輸入完成以后励幼,按ESC,然后在命令處輸入 :wq口柳,保存退出VIM苹粟,回到Git Shell窗口。

現(xiàn)在回到終端跃闹,你應(yīng)該能看到類似于以下內(nèi)容的界面:

image.png

終于提交了第一個(gè) commit嵌削,恭喜!

使用 -m 選項(xiàng)繞過編輯器
提示:如果你要編寫的提交說明很簡(jiǎn)短望艺,不想等打開代碼編輯器后再輸入信息苛秕,可以直接在命令行中使用 -m 選項(xiàng)傳入信息:

$ git commit -m "Initial commit"
在上述示例中,文本"Initial commit"被作為提交說明信息荣茫。但是注意,不能為 commit 提供信息的描述(description)场靴,只能提供信息部分(message)啡莉。

第二個(gè) commit - 添加更改
我們已經(jīng)短暫休息了一下,現(xiàn)在提交第二個(gè) commit旨剥!將以下內(nèi)容添加到 index.html 中的 body 標(biāo)記中:

<header>
 <h1>Expedition</h1>
</header>

下一步是什么咧欣?沒錯(cuò),運(yùn)行 git status轨帜!

image.png

具有多個(gè)作用的 git add

我們修改了文件魄咕。git 看到該文件已被修改。到目前為止蚌父,一切正常哮兰。注意,要提交 commit苟弛,待提交的文件必須位于暫存區(qū)喝滞。要將文件從工作目錄移到暫存區(qū),我們應(yīng)該使用哪個(gè)命令膏秫?答對(duì)了右遭,是 git add!

我們使用 git add 向暫存區(qū)添加了新建的文件,同樣的窘哈,我們也能使用同一命令將修改的文件暫存吹榴。

現(xiàn)在使用 git add 命令將文件移到暫存區(qū),并使用 git status 驗(yàn)證文件是否位于暫存區(qū)滚婉。

*即便是修改的文件图筹,也要使用git add命令將修改的文件放在暫存區(qū)域。

image.png

執(zhí)行了git add 文件變成綠色满哪,這時(shí)候就可以commit了婿斥,使用-m跳過編輯器。

git commit -m "Add header to blog"

image.png

這時(shí)候通過git log 可以查看提前的信息:

image.png

git commit 小結(jié)
git commit 命令會(huì)取出暫存區(qū)的文件并保存到倉庫中哨鸭。

$ git commit
此命令:

將打開配置中指定的代碼編輯器

(請(qǐng)參閱第一節(jié)課中的 git 配置流程民宿,了解如何配置編輯器)

在代碼編輯器中:

必須提供提交說明

以 # 開頭的行是注釋,將不會(huì)被記錄

添加提交說明后保存文件

關(guān)閉編輯器以進(jìn)行提交

然后使用 git log 檢查你剛剛提交的 commit像鸡!

git diff

The git diff 命令可以用來查看已被加入但是尚未提交的更改活鹰。

$ git diff

查看待提交的內(nèi)容和線上版本的差異。

要查看 git diff 的實(shí)際運(yùn)行效果只估,我們需要一些未經(jīng)提交的更改志群!在 index.html 中,我們重新組織標(biāo)題的措辭蛔钙。將標(biāo)題從"Expedition"改為"Adventure"锌云。保存文件,然后在終端上運(yùn)行 git diff吁脱。

你應(yīng)該會(huì)看到以下結(jié)果:

image.png

哇桑涎,看起來是不是很熟悉啊兼贡?和運(yùn)行 git log -p 的結(jié)果一樣攻冷!告訴你個(gè)秘密,git log -p 其實(shí)就是在后臺(tái)使用了 git diff遍希。所以你實(shí)際上已經(jīng)知道如何閱讀 git diff 的輸出結(jié)果等曼!

git diff 小結(jié)
總結(jié)下,git diff 命令用來查看已經(jīng)執(zhí)行但是尚未 commit 的更改:

$ git diff
此命令會(huì)顯示:

已經(jīng)修改的文件

添加/刪除的行所在的位置

執(zhí)行的實(shí)際更改

讓 git 忽略某些文件

為何要忽略文件
還記得在幾個(gè)章節(jié)之前學(xué)習(xí)的 git add 嗎凿蒜?我們可以使用一個(gè)特殊的字符來表示當(dāng)前目錄和所有子目錄禁谦,而不用一個(gè)個(gè)地添加文件。還記得是什么字符嗎废封?

沒錯(cuò)枷畏,是句點(diǎn) (.)!

問題
假設(shè)你向項(xiàng)目所在目錄添加了一個(gè) Word 文檔等文件虱饿,但是不希望將該文件添加到倉庫中拥诡。git 會(huì)看到這個(gè)新文件触趴,所以在你運(yùn)行 git status 時(shí),它將顯示在文件列表中渴肉。

image.png

在項(xiàng)目中包含此文件存在的潛在問題是冗懦,因?yàn)?git add . 會(huì)添加所有文件,因此該 Word 文檔可能會(huì)不小心 commit 到倉庫仇祭。

gitignore
如果你想將某個(gè)文件保留在項(xiàng)目的目錄結(jié)構(gòu)中披蕉,但是確保它不會(huì)意外地提交到項(xiàng)目中,可以使用名稱特殊的文件 .gitignore(注意文件名開頭的點(diǎn)乌奇,很重要C唤病)。將此文件添加到 new-git-project項(xiàng)目根目錄礁苗。你只需列出希望 git ignore(忽略爬凑,不跟蹤)的文件名,git 將忽略這些文件试伙。

我們用"project.docx"文件試一下嘁信。將以下行添加到 .gitignore 文件中:(在根目錄新建.gitignore文件,沒有擴(kuò)展名)

project.docx
現(xiàn)在運(yùn)行 git status 并查看輸出結(jié)果:

image.png

*.gitignore無法直接在文件系統(tǒng)中新建疏叨,可以通過命令行進(jìn)行重命名:

mv .gitignore.txt .gitignore

git 知道查看名稱為 .gitignore 的文件的內(nèi)容潘靖。因?yàn)樗谄渲锌吹?project.docx",所以忽略了該文件蚤蔓,并且沒有在 git status 的輸出結(jié)果中顯示該文件卦溢。

通配符速成課程

假設(shè)你向項(xiàng)目中添加了 50 個(gè)圖片,但是希望 git 忽略所有這些圖片秀又。這樣的話单寂,是否需要將每個(gè)文件名都列在 .gitignore 文件中呢?當(dāng)然不用了涮坐,要不然太可怕了凄贩!相反誓军,你可以采用一個(gè)叫做 通配符( 的概念袱讹。

通配符允許你使用特殊的字符來表示某些格式/字符。在 .gitignore 文件中昵时,你可以使用:

空白行作為空格

- 將行標(biāo)記為注釋

    • 與 0 個(gè)或多個(gè)字符匹配
      ? - 與 1 個(gè)字符匹配
      [abc] - 與 a捷雕、b 或 c 匹配
      ** - 與嵌套目錄匹配 - a/**/z 與以下項(xiàng)匹配
      a/z
      a/b/z
      a/b/c/z
      因此如果所有 50 個(gè)圖片都是 JPEG 圖片,并且位于"samples"文件夾中壹甥,那么我們可以向 .gitignore 中添加以下行救巷,使 git 忽略所有這 50 個(gè)圖片。

samples/*.jpg

gitignore 小結(jié)
總結(jié)下句柠,.gitignore 文件用來告訴 git 不應(yīng)跟蹤的文件浦译。該文件應(yīng)該放在 .git 目錄所在的目錄棒假。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市精盅,隨后出現(xiàn)的幾起案子帽哑,更是在濱河造成了極大的恐慌,老刑警劉巖叹俏,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻枕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粘驰,警方通過查閱死者的電腦和手機(jī)屡谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝌数,“玉大人愕掏,你說我怎么就攤上這事∽亚埃” “怎么了亭珍?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枝哄。 經(jīng)常有香客問我肄梨,道長,這世上最難降的妖魔是什么挠锥? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任众羡,我火速辦了婚禮,結(jié)果婚禮上蓖租,老公的妹妹穿的比我還像新娘粱侣。我一直安慰自己,他們只是感情好蓖宦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布齐婴。 她就那樣靜靜地躺著,像睡著了一般稠茂。 火紅的嫁衣襯著肌膚如雪柠偶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天睬关,我揣著相機(jī)與錄音诱担,去河邊找鬼。 笑死电爹,一個(gè)胖子當(dāng)著我的面吹牛蔫仙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丐箩,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摇邦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼恤煞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起施籍,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤阱州,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后法梯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苔货,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歌溉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年野来,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了优训。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软能。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡春弥,死狀恐怖浙垫,靈堂內(nèi)的尸體忽然破棺而出泡垃,到底是詐尸還是另有隱情纺念,我是刑警寧澤捂掰,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布敢会,位于F島的核電站,受9級(jí)特大地震影響这嚣,放射性物質(zhì)發(fā)生泄漏鸥昏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一姐帚、第九天 我趴在偏房一處隱蔽的房頂上張望吏垮。 院中可真熱鬧,春花似錦罐旗、人聲如沸膳汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遗嗽。三九已至,卻和暖如春鼓蜒,著一層夾襖步出監(jiān)牢的瞬間痹换,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工友酱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晴音,地道東北人柔纵。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓缔杉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搁料。 傳聞我的和親對(duì)象是個(gè)殘疾皇子或详,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照系羞,而是把代碼倉庫完整的鏡像下來。這樣一來霸琴,任何一處協(xié)同...
    __silhouette閱讀 15,899評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照椒振,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,929評(píng)論 0 11
  • 下雨天, 音樂和巧克力更配哦梧乘! 香蕉和酸奶也很配哦澎迎! 剝香蕉 切香蕉 加點(diǎn)酸奶 加點(diǎn)奧利奧碎更好吃哦! 爸爸媽媽 ...
    西安卡樂咪閱讀 283評(píng)論 0 0
  • 2017年11月20日 星期一 天氣 晴 早上輪到婉婷同學(xué)做早餐了选调,可是2個(gè)小家伙有點(diǎn)賴床夹供,起來的比較晚...
    言書9130閱讀 258評(píng)論 3 13
  • 39 還是瞎子摸象 “有人打電話找我嗎?”我問法蘭。 出乎我意料之外仁堪,她居然回答:“有哮洽,是皮區(qū),他想和你談?wù)勏夷簟鸟辅!?..
    發(fā)現(xiàn)好物閱讀 489評(píng)論 0 0