# 前言
幾篇文章下來,我們已經建立「暫存區」、「儲存庫」的觀念,同時學習到幾個重要的指令:
git add
git commit
這兩個行為如同添加商品到購物車,然後結帳的動作。
用一個「激問句」來開啟這篇文章的主題:
# 查看 Git 目前的狀態
查看狀態的指令,是指令派的使用者「必學」的指令。
在執行 git add
後,與執行 git commit
前,終端機畫面其實不會告訴我們目前哪些資料是在暫存區,Git 於是提供一個指令讓我們可以查詢:
git status |
我們在一個「空資料夾」執行 git init
,之後,直接執行 git status
,來看看剛「初始化」的儲存庫, git status
會出現的內容:
$ git init # 執行 git init 初始化儲存庫 | |
Initialized empty Git repository in D:/GitHub/GitLearn # 跳出目前儲存庫沒東西的訊息 | |
$ git status # 執行 git status 看看狀態 | |
On branch master | |
No commits yet | |
nothing to commit (create/copy files and use "git add" to track) |
來解釋解釋此時 git status
跑出來的東西:
-
On branch master ,告訴我們現在人在 master 分支,這也是預設的分支名稱。
-
No commits yet,因為還沒發布任何版本,所以會出現這個字樣。
-
nothing to commit,這句話最重要:「沒東西可以 commit」!
由於現在工作目錄是空的,沒東西可以 commit 很正常,不過未來開始版控後如果看到這句,就代表「工作目錄」的資料都已經 commit 完成! -
(create/copy files and use “git add” to track) ,因為資料夾目前是空的,提示我們可以新增檔案,並且用
git add
來「追蹤」這些檔案。
關於 追蹤 的觀念,之後會專門寫一篇文章來跟大家講解。
# 資料夾出現新檔案時的狀態
來看看剛進貨的商品,還沒加入購物車時, git status
會怎麼顯示它的狀態。
先在資料夾新增 index.html
與 readme.txt
,直接來執行 git status
。
$ git status | |
On branch master | |
No commits yet | |
Untracked files: | |
(use "git add <file>..." to include in what will be committed) | |
index.html | |
readme.txt | |
nothing added to commit but untracked files present (use "git add" to track) |
一樣來解釋解釋:
-
On branch master,跟我們說現在人在 master 分支上,這是 一定 會出現的文字。
-
No commits yet,我們還是沒有 commit ,這行又出現了。
-
Untracked files:,用來列出 Git 偵測到「未追蹤」的檔案。
-
(use “git add <file>…” to include in what will be committed),提示我們可以用
git add
指令把檔案加到暫存區。 -
nothing added to commit but untracked files present (use “git add” to track)…,告訴我們「雖然沒東西能 commit」,但可以用
git add
指令把檔案傳到暫存區。
上述 git status
重點就是:
你還不能下單 ( commit
),但商品還有庫存,只要你把商品加入購物車 ( git add
),購物車 ( 暫存區
) 內就可以看得到你的商品哦~~
假設我們真的經不起誘惑 (?),把商品加入購物車了,商品狀態 ( git status
) 又會出現什麼資訊呢?
讓我們繼續… 看~下~去~
# 檔案加入暫存區之後的狀態
經不起誘惑的我,將 index.html
透過 git add
加到了暫存區。
此時執行 git status
:
$ git status | |
On branch master | |
No commits yet | |
Changes to be committed: | |
(use "git rm --cached <file>..." to unstage) | |
new file: index.html | |
Untracked files: | |
(use "git add <file>..." to include in what will be committed) | |
readme.txt |
-
第一句、第二句都是一樣的內容,就不特別說明。
-
Changes to be committed:,這裡列出所有穩定在暫存區的商品,如果執行 commit,這個訊息底下的檔案,就會被發佈成一個版本。
-
use “git rm --cached <file>…”,可以用這個指令把檔案移出暫存區,讓檔案變成 未暫存 (unstage) 的狀態。
-
Untracked files:, 因為
add
的檔案沒有readme.txt
,它依然存在這裡。 -
(use “git add <file>…” to include in what will be committed),未追蹤 區域一定會出現的一句話,提示我們用這個指令來追蹤檔案。
這個情境就很像我們網購一定會做的事情,把商品加入購物車,跑到購物車確認商品。
最重要的內容會在 Changes to be committed 底下呈現,它能讓我們確定檔案是不是已經被加到 Git 暫存區,要確定暫存區有東西後,我們執行 commit 才有意義!
接下來,要是把商品下單購買了呢…?
# 執行完 Commit 之後的狀態
前置作業:
剛剛只先把 index.html
加到暫存區,不過為了查看所有檔案都 commit 後的狀態,就先執行 git add .
,再執行 git commit
,將所有檔案都資料紀錄成第一個版本。
接著就來看看此時的 git status
吧:
$ git status | |
On branch master | |
nothing to commit, working tree clean |
-
第一句依舊是
git status
標配的內容,告訴我們所在分支名稱。 -
nothing to commit, working tree clean:我們再度看到一開始提到「很重要」的那句話了 nothing to commit,只要出現這句話,代表我們已經買下商家所有商品庫存,沒東西可以買了!
好有錢
言下之意,所有檔案的異動都被紀錄到「儲存庫」之中,此時已經沒東西能再紀錄了。
看到這邊,有沒有注意到 Git 的 git status
寫得非常詳盡?!
身為指令派的我,每次 commit 之前,一定會先執行 git status
,確認檔案已經在暫存區,才會 commit 。
故事到這還沒結束,雖然我們已經下單,假如想要購買不同規格的商品…
對應到實務上,已經紀錄到儲存庫的檔案,如果又進行修改,此時的檔案狀態又會是…?
# 編輯已經提交的檔案後,檔案呈現的狀態
在網購的情境,如果想購買不同規格的商品,就要重新選擇不同規格的商品後,把他加到購物車,再下單一次才行。
實務上,就是當資料都 commit 後,發現存好的檔案需要修正,於是去編輯檔案的行為。
這種狀況下的 git status
會出現什麼資訊呢?
上一步剛好已經示範到所有內容都 commit 了,就直接來編輯 index.html
,並且執行 git status
吧!
$ git status | |
On branch master | |
Changes not staged for commit: | |
(use "git add <file>..." to update what will be committed) | |
(use "git restore <file>..." to discard changes in working directory) | |
modified: index.html | |
no changes added to commit (use "git add" and/or "git commit -a") |
這裡關鍵在 Changes not staged for commit,告訴我們更動的內容,目前處在「不能 commit」 的「非暫存」狀態。
只要已經在儲存庫的檔案,再度於工作目錄中編輯, git status
就會把檔案列在 not staged
區塊。
異動後的檔案,必須重新提交,存入下一個 commit 版本。
# 複習:重新提交異動完成的檔案
一樣的商品想再次購買不同的規格,「基特平台」我們兩種下單方式可以選擇:
- 把商品「加入購物車」,並且再「下單」一次。
- 不用加入購物車直接下單,不過要在「下單」時註記「自動加入購物車」。
無論選擇哪一種方式,都是再次執行下單的行為,原本的「訂單紀錄」依舊會存在,而且還會多一筆「新單資訊」。
實際的指令之前已經說明過了,來複習一下:
- 重新執行
git add
,再執行git commit -m "版本訊息"
。 - 直接執行
git commit -a -m "版本訊息"
或是git commit -am "版本訊息"
。
# 總結
git status
,是一個可以拿來查看 Git 檔案狀態的指令,是指令派使用者的好幫手。
實在是居家旅行, X 人 X 口 ,必備良藥
這個指令除了能顯示工作目錄所有檔案目前的狀態之外,還會順便提示我們下一步可以怎麼操作。
學習閱讀 git status
顯示的資訊,會是指令派的使用者的重要課題。
一言以蔽之今日的內容: