iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1

前言

幾篇文章下來,我們已經建立「暫存區」、「儲存庫」的觀念,同時學習到幾個重要的指令:

  • 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 跑出來的東西:

  1. On branch master ,告訴我們現在人在 master 分支,這也是預設的分支名稱。

  2. No commits yet,因為還沒發布任何版本,所以會出現這個字樣。

  3. nothing to commit,這句話最重要:「沒東西可以 commit」!
    由於現在工作目錄是空的,沒東西可以 commit 很正常,不過未來開始版控後如果看到這句,就代表「工作目錄」的資料都已經 commit 完成!

  4. (create/copy files and use "git add" to track) ,因為資料夾目前是空的,提示我們可以新增檔案,並且用 git add 來「追蹤」這些檔案。

關於 追蹤 的觀念,之後會專門寫一篇文章來跟大家講解。

資料夾出現新檔案時的狀態

來看看剛進貨的商品,還沒加入購物車時,git status 會怎麼顯示它的狀態。

先在資料夾新增 index.htmlreadme.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)

一樣來解釋解釋:

  1. On branch master,跟我們說現在人在 master 分支上,這是 一定 會出現的文字。

  2. No commits yet,我們還是沒有 commit ,這行又出現了。

  3. Untracked files:,用來列出 Git 偵測到「未追蹤」的檔案。

  4. (use "git add <file>..." to include in what will be committed),提示我們可以用 git add指令把檔案加到暫存區。

  5. 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
  1. 第一句、第二句都是一樣的內容,就不特別說明。

  2. Changes to be committed:,這裡列出所有穩定在暫存區的商品,如果執行 commit,這個訊息底下的檔案,就會被發佈成一個版本。

  3. use "git rm --cached <file>...",可以用這個指令把檔案移出暫存區,讓檔案變成 未暫存 (unstage) 的狀態。

  4. Untracked files:, 因為 add 的檔案沒有 readme.txt,它依然存在這裡。

  5. (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
  1. 第一句依舊是 git status 標配的內容,告訴我們所在分支名稱。

  2. 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 版本。

複習:重新提交異動完成的檔案

一樣的商品想再次購買不同的規格,「基特平台」我們兩種下單方式可以選擇:

  1. 把商品「加入購物車」,並且再「下單」一次。
  2. 不用加入購物車直接下單,不過要在「下單」時註記「自動加入購物車」。

無論選擇哪一種方式,都是再次執行下單的行為,原本的「訂單紀錄」依舊會存在,而且還會多一筆「新單資訊」。

實際的指令之前已經說明過了,來複習一下:

  1. 重新執行 git add ,再執行 git commit -m "版本訊息"
  2. 直接執行 git commit -a -m "版本訊息" 或是 git commit -am "版本訊息"

總結

git status,是一個可以拿來查看 Git 檔案狀態的指令,是指令派使用者的好幫手。
實在是居家旅行, X人X口 ,必備良藥

這個指令除了能顯示工作目錄所有檔案目前的狀態之外,還會順便提示我們下一步可以怎麼操作。

學習閱讀 git status 顯示的資訊,會是指令派的使用者的重要課題。

一言以蔽之今日的內容:

當你不知道下一步該怎麼操作時,執行 git status 吧!

上一篇
一起來學 Git 吧!(8) - 第一個 Commit 該放什麼內容?
下一篇
一起來學 Git 吧!(10) - 已追蹤(Tracked) 、未追蹤(Untracked),已暫存(Staged)、未暫存(Unstaged)
系列文
不熟 Git 嗎?好巧我也是,不如我們一起來學吧!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言