在該篇文章中,咱們終於要來學習如何建立本身的提交(commit
),在前面的文章中,咱們已經學會使用 git init
命令來建立新倉庫,使用 git clone
命令來複制現有倉庫,使用 git log
命令來查看現有的提交。以及使用很是重要的 git status
命令來查看倉庫的狀態。本篇文章會在這些知識的基礎上添加 git add
、 git commit
和 git diff
。 在具體講解這三個命令以前,咱們先簡單的看看這三個命令的做用。html
git add
可讓你將文件從工做目錄添加到暫存區。git commit
可讓你將文件從暫存區中取出。並保存在倉庫區中,也就是你實際將要提交的地方。git diff
能夠顯示文件兩個版本之間的差別,它的輸出與上篇文章中使用的 git log -p
命令的輸出徹底同樣。在使用 git add
命令以前,咱們先回顧一下倉庫的建立過程。咱們如今本身的喜歡的目錄下建立倉庫,在下圖中個人倉庫的地址爲documents/GitTest/GitTestProject
。在接下來的文章中,都會以該倉庫做爲例子進行講解。linux
首先咱們先進入該目錄,並經過 git init
建立Git倉庫:git
在沒有向倉庫提交任何commit時,屢次運行
git init
命令是沒有關係的,git init
命令只會屢次從新初始化倉庫算法
咱們必定要在運行Git相關命令後,必定要使用 git status
命令來檢查當前倉庫的狀態。由於咱們不能保證,咱們是否遺忘了某些東西。若是你像我同樣使用了 git status
命令,那麼你能獲得下列輸出結果:vim
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
複製代碼
當咱們使用 git status
檢查了倉庫確實沒有任何文件後,那接下來咱們來建立一些文件。這裏我分別建立了三個文件,Git總目錄.md
、Git練習.md
、JVM系列之總目錄.md
,這個時候咱們再使用 git status
來查看咱們倉庫的狀態,咱們能獲得下列結果:bash
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
Git總目錄.md
Git練習.md
JVM系列之總目錄.md
nothing added to commit but untracked files present (use "git add" to track)
複製代碼
要將文件提交到暫存區,咱們須要使用 git add
命令,這裏咱們將Git總目錄.md
文件添加到暫存區中,使用命令 git add Git總目錄.md
,咱們再使用 git status
查看咱們的倉庫狀態,咱們能獲得下列結果:app
還記得
暫存區
嗎?暫存區是Git目錄下的一個文件,存儲的是即將進入下個 commit 內容的信息。能夠將暫存區看作準備工做臺,Git 將在此區域獲取下個 commit。編輯器
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: Git總目錄.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
Git練習.md
JVM系列之總目錄.md
複製代碼
這個時候,在命令行中的 Untracked files
下,就只有Git練習.md
與JVM系列之總目錄.md
了,ide
細心的小夥伴確定看到
(use "git rm --cached <file>..." to unstage)
,該命令能夠幫助咱們將你git add
錯誤提交的文件,從暫存區中移除,此外,在命令行輸出中出現了"unstage"(撤消暫存)字眼。將文件從工做目錄移到暫存區叫作"staging"
(暫存)。若是已移動文件,則叫作"staged"
(已暫存)。從暫存區將文件移回工做目錄將"unstage"
(撤消暫存)。工具
當咱們已經將 Git總目錄.md
添加到暫存區中後,咱們可能還想將剩下的兩個文件 Git練習.md
、 JVM系列之總目錄.md
也添加到暫存區中。固然咱們能夠一個一個的使用使用 git add
命令添加剩餘的文件,咱們也能夠這樣:
git add Git練習.md JVM系列之總目錄.md
複製代碼
使用
git add <file1> <file2> … <fileN>
這種方式,咱們能夠添加多個文件,其中<file>
表明一個或多個文件。
除了使用上述方法之外,咱們還可使用一個特殊的命令行字符 .(點)
,.(點)
表明當前目錄,能夠用來表示全部文件和物理(注意!注意!注意!包括全部嵌套文件和目錄)。
git add Git練習.md JVM系列之總目錄.md
#等於
git add .
複製代碼
若是你使用 .(點)
添加了多餘的文件,那麼咱們可使用git rm --cached <file1> <file2> … <fileN>
命令,將多餘的文件從暫存區中移除。
當咱們將上文提到的三個文件都添加到暫存區以後,如今須要將暫存區中的內容提交到倉庫中去,也就是使用 git commit
命令,固然在運行該命令以前,咱們要時刻使用 git status
命令查看當前倉庫的狀態。使用 git stasus
查看狀態:
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: Git總目錄.md
new file: Git練習.md
new file: JVM系列之總目錄.md
複製代碼
嗯,美滋滋,全部的文件都在暫存區中了,那如今開始咱們的提交吧。在具體提交以前,咱們須要注意,若是你在下載 Git後沒有設置文本編輯器,那麼 Git 會默認會調用系統的默認編輯器,通常狀況是 Vi 或者 Vim 。固然咱們也能夠配置咱們本身喜歡的文本編輯器。這裏我配置的是 Sublime Text ,配置命令以下所示:
VS Code 配置-->VS Code as Git editor
Sublime Text-->OS X Command Line
若是你對默認的編輯器(Vi或者Vim)感興趣,你有可能須要這篇文章 Linux vi/vim
git config --global core.editor "'/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl' -n -w"
複製代碼
若是你像我同樣配置了Sublime Text,那麼咱們會獲得下圖:
在第一行
中,就是咱們須要輸入這次commit的信息,由於這是咱們的第一次提交,因此這裏我填的是 Initial commit
,固然你能夠根據你的喜愛填寫信息。其餘被#
標記的行都是註釋信息,都會被忽略。當咱們使用 git commit
命令後,咱們在控制檯會獲得以下輸出:
[master (root-commit) 18522c6] Initial commit
3 files changed, 45 insertions(+)
create mode 100644 Git總目錄.md
create mode 100644 Git練習.md
create mode 100644 JVM系列之總目錄.md
複製代碼
若是你配置了Git文本編輯器,那麼會在你輸入內容,退出編輯器後,會自動提交commit。
這個時候咱們再使用 git status
查看咱們的倉庫狀態,輸出結果爲:
On branch master
nothing to commit, working tree clean
複製代碼
上述代表,全部暫存區中的文件,都提交到Git的倉庫區中了。如今咱們就將第一個commit提交到倉庫中去了。固然有可能你提交的描述信息很簡短,那麼你可使用-m
選項來跳過編輯器。以下所示:
git commit -m "initial commit"
複製代碼
固然經過 -m
選項提交的消息只包含標題的,不會包含正文,若是你想怎麼知道怎麼寫一個閱讀性良好的commit message,那麼你有可能閱讀下面這兩篇文章;
如今咱們已經進行咱們的第一次commit了,那麼如今咱們修改Jxm系列之總目錄.md
文件,打開該文件,將文件中的語句- Java類加載器(雙親委派模型)
刪掉,並保存。以下操做:
- Java內存結構及分區
- Java對象的建立、存儲及訪問
- Java判斷對象是否存活
- 垃圾回收算法(GC)
- Jvm中的常見的垃圾回收器
- Java類加載過程
- Java類加載器(雙親委派模型)#---> 刪除這行
複製代碼
接着咱們使用git status
查看當前咱們的倉庫狀態:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Jvm系列之總目錄.md
no changes added to commit (use "git add" and/or "git commit -a")
複製代碼
從控制檯中,咱們能夠看到咱們的文件Jvm系列之總目錄.md
已經被標記爲modifed
了,那如今咱們如何將修改的文件提交到Git的倉庫區中呢?要將內容提交到Git的倉庫區中去,咱們須要將文件提交到暫存區中,在以前的命令中將文件提交到暫存區中,咱們須要使用命令 git add
命令,固然 git add
命令不只只針對新建
的文件,它仍能夠將修改後
的文件提交到暫存區中。也就是咱們只要使用 git add
與 git commit
命令,咱們就能將修改後的文件提交到Git的倉庫中去了。
在學習了git add
與 git commit
命令後,咱們簡單的總結一下這兩個命令。
git add
能夠不只能夠向暫存區中添加新的文件,一樣也能將修改的文件進行暫存。git commit
會取出暫存區的文件,並保存到倉庫中。該命令須要輸入commit消息。還有最後一個命令 git diff
。這個命令能夠幫助咱們查看咱們一些沒有提交的更改,也就是說咱們能夠看到當前修改的文件與Git倉庫之間的差別。仍是Jvm系列之總目錄.md
文件爲例,這裏咱們繼續刪除- Java類加載過程
,以下圖所示:
- Java內存結構及分區
- Java對象的建立、存儲及訪問
- Java判斷對象是否存活
- 垃圾回收算法(GC)
- Jvm中的常見的垃圾回收器
- Java類加載過程 #---> 刪除這行
複製代碼
而後咱們使用 git diff
命令查看命令行輸出:
在上圖中,紅色表示當前修改的文件刪除的行。我相信你們看到這個界面必定會很熟悉,還記的咱們以前介紹長褲倉庫的歷史提交記錄中,所將的git log -p
嗎?其實git log -p
其實就是使用了git diff
命令。關於上圖中,若是你們不理解每行所表明的意思,那麼能夠查看《查看倉庫的歷史記錄(四)》中git log -p
中的介紹。
又到了咱們熟悉的偷懶環節了。如今咱們來看看一下 git add
與 git commit
與 git diff
在idea中的使用,
若是你的項目已經經過Git管理,那麼當你在IDEA中建立新的文件夾時,編譯器會以下提示:
經過提示消息,咱們其實就能看出,就是提示咱們是否將當前新建立的文件添加到Git的暫存區中,若是你選擇肯定,那麼就會將該文件添加到暫存區中。若是你不當心選擇了cancel
,不用擔憂,你仍然可使用下列方式來添加文件到暫存區中。經過選擇你要添加的文件,點擊鼠標右鍵
依次選擇Git
--->add
。就能夠將該文件添加到暫存區中。以下圖所示:
小提示:在ide是以一種很是直觀的顏色來表示當前倉庫中的文件狀態:
- 紅色:表示當前文件或目錄沒有被跟蹤。
- 綠色:表示當前文件或目錄已經被添加到倉庫中了。
- 藍色:表示被添加到倉庫中的文件或目錄被修改或移動。
- 橙色:表示被忽略的文件。
- 白色:表示沒有任何更改。
當咱們將文件添加到暫存區中後,咱們能夠經過ide頂部的工具欄進行commit操做,記住是頂部喲!具體以下圖所示:
注意:若是你是修改已經跟蹤過的文件,那麼咱們不須要將修改的文件經過 git add
命令將其添加到暫存區中,注意!!!!當咱們直接使用 IDE 中的 commit 按鈕時,默認是執行 git add
與 git commit
這兩個命令的。
一樣的 git diff
也在頂部,以下圖所示:
固然除了上述全部的操做,咱們還可使用ide提供的快捷鍵進行操做,使用 Alt+ ` (Windows)
或 option + ` (Mac)
的方式,能夠獲得如下界面:
git commit
git diff
git add
站在巨人的肩膀上,才能看的更遠~