Git 設置及基礎使用(add & commit)

前言

隨著使用 Git 一段時間了,一開始一頭霧水的操作也比較有概念了,是時候整理筆記了!
當然,為了訓練自己盡快習慣命令列介面,操作過程中全部使用命令列介面(真的不習慣的人還是有圖形化介面可以用),常用指令可以參考 Terminal 常用指令

Git 安裝及設定

作業系統: windows 10

  • Git 官方網站進行下載並安裝。

  • 打開 Git bash 或任何自己慣用的命令列介面。

  • 設定 nameemail
    如下圖所示, Git 在建立一個版本紀錄時,會給這個紀錄 「commit 編號」、「Author name」、「Author email」、建立時間和「版本訊息(commit message)」…等訊息。在多人合作的專案中,當需要對特定版本進行討論時,知道版本建立人的資訊就非常的重要。

    git Log Screenshot

    「Author name」是希望讓其他人知道的稱呼方式、「Author email」則是聯絡資訊。通常不會頻繁更換這兩個資訊,所以可以直接用全域( --global )設定即可。如果有傳遞 --global 參數,只需要設定這一次,之後都會直接套用此資訊。

    1
    2
    3
    4
    5
    6
    # 不限執行目錄
    git config --global user.name "想顯示的名稱"
    git config --global user.email "想顯示的聯絡方式"

    # 完成後可執行以下命令來檢查設定結果
    git config --list

    備註:如果特定專案想用不同的名字或電子郵件,只需要在該專案目錄內執行不加 --global 參數的命令進行設定即可。

為專案建立 Git repository

  • 當我們打算使用 Git 來追蹤專案時,只需要進入該專案的資料夾(根目錄)並執行:

    1
    git init

    它會在當前目錄裡建立 .git 資料夾(隱形資料夾),並在裡面紀錄專案的版本紀錄。

  • 如果想在當前目錄建立新的專案資料夾並追蹤,執行以下指令:

    1
    git init <folder_name>

    它會在當前目錄建立新資料夾,並在資料夾內建立 .git 資料夾(隱形資料夾)來追蹤專案。


  • 一個 Git repository 原則上會追蹤資料夾內的每個檔案(除了 ignore 清單),所以要注意不要在 repository 裡建立另一個 repository。

  • 如果要刪除整個專案的追蹤紀錄,只要刪除 .git 資料夾即可。

什麼是 commit?

Git commit 類似「存檔」的動作,他會紀錄檔案的「快照」。因為是快照,所以它可以將版本進行比較、回復、合併…等操作。

  • 不同 commit 間的比較,就是比對兩個版本「快照」不同的地方。
  • 「回復成之前的版本」就是讓檔案回到指定版本快照的樣子。
  • 「合併」就是將指定的幾個版本中不同的地方都保留,並留下新的快照。

Git status 說明

三種 status

要使用 Git 來做版本追蹤,首先要知道被追蹤專案裡的檔案處於哪種狀態?

Git repository 會將專案裡的所有檔案分成以下幾種狀態 ——

  1. Untracked files:Git 尚未追蹤的檔案。沒有提交(commit)過、也還沒用 git add 指令加入追蹤清單。
  2. Unstaged files:編輯中的檔案,還沒有打算把當下進度「拍照」。
  3. Staged files:編輯告一段落,決定把檔案當下進度進行「快照」。
  4. Committed:版本「快照」完成,並留下該版本的相關訊息。

不同的檔案可能處於不同的狀態,可以用以下指令來查看專案中檔案處於哪種狀態。

1
git status

git status 指令

執行 git status 指令後會列出尚未進行提交(commit)的檔案清單,並分成三個部分(有內容的才會顯示) ——

  1. Changes to be committed:即已經用 git add 加入等待提交的檔案清單。
  2. Changes not staged for commit:即已追蹤的檔案(以前提交過),目前編輯中,還沒使用 git add 改變狀態的清單。
  3. Untracked files:即尚未追蹤的檔案(沒有提交過),也還沒使用 git add 開始追蹤的清單。

Untracked files 對 Git 版本管理來說是「還不存在」的檔案,因為還沒告訴 Git 去關注檔案的異動。與已追蹤的檔案相比,執行某些指令時會被 Git 忽略。

git status

建立 commit (add & commit)

接下來要介紹的兩個指令可以讓檔案在不同的 status 中移動。初學階段最常用到的兩個指令分別是 git addgit commit

git add 指令

git add 作用:把檔案加入等待「快照」的清單中。如果再次執行 git status ,會發現指定檔案已經從 Unstaged files 清單移到 Staged files 清單中了。

Git 每次建立新版本時,並不限於「一個」檔案的快照,而是可以一口氣幫多個檔案進行「快照」。使用 git add 指令的目的就是將指定的檔案加入等候「快照」的清單中。使用 git add 指令時,須將檔案的副檔名一併寫上。

1
2
3
4
5
# 加入一個指定檔案
git add test1.txt

# 加入多個指定檔案
git add test1.txt test2.txt test3.txt

當我們想要將 Unstaged files 清單中的所有檔案一口氣加到 Staged files 清單時,可以執行另一個指令:

1
git add .

git commit -m 指令

git commit 作用:為這次建立的新版本進行快照,並添加說明訊息。執行這個指令會將 Staged files 清單中的所有檔案進行「快照」、加入版本資訊(編號、作者資訊、說明訊息、時間…等),完成後 Staged files 清單中會恢復空白狀態。

Git 預設的文字編輯器是 Vim ,他是一個對初學者來說相對不友善的工具(但很多 coding 大大很愛用),如果沒有使用過這個工具,可能會連怎麼輸入或怎麼離開都不知道。當我們輸入 git commit 時,它會自動開啟 Vim 來讓你輸入 commit message ,為了避免初學時期碰到「進退兩難」的情況,通常會先使用 git commit -m 指令替代。

1
git commit -m "想要加入的訊息放在雙引號裡"

加入 -m 這個參數,可以讓我們在進行 commit 指令的同時,直接加入「單行」的 commit message ,不會另外跳出 Vim 介面來進行編輯。

這時,如果我們執行 git log 查看版本紀錄,就會發現多了一筆最新加入的 commit 版本了!

變更預設文字編輯器

如前面說明提到,使用 git commit 指令會跳出當初在安裝 Git 時選定的文字編輯器(預設是 Vim)。如果想變更成其他文字編輯器,可以到 Github 官方文件找到想使用的編輯器,並在命令列介面輸入右邊提供的指令即可。

Git 指令練習

練習題目:題目內容
題目來源:The Git & Github Bootcamp ——Colt Steele

這個練習只用到了上面介紹的指令,也是初學階段最常用到的指令。可以先點開連結試著做一次,如果遇到問題再參考下面列出的作法。

  1. Create a new folder called Shopping

    1
    mkdir Shopping
  2. Initialize a new git repo inside of the Shopping folder (make sure you’re not already inside of a Git repo!)

    1
    2
    cd Shopping
    git init
  3. Make a new file called yard.txt

    1
    touch yard.txt
  4. Make another new file called groceries.txt

    1
    touch groceries.txt
  5. Make a commit that includes both empty files. The message should be “create yard and groceries lists”

    1
    2
    git add yard.txt groceries.txt
    git commit -m "create yard and groceries lists"
  6. In the yard.txt file, add the following changes:
    - 2 bags of potting soil
    - 1 bag of worm castings

  7. In the groceries.txt file, add the following:
    - 4 tomatoes
    - 6 shallots
    - 1 fennel bulb

  8. Make a new commit, including ONLY the changes from the groceries.txt file. The commit message should be “add ingredients for tomato soup”

    1
    2
    git add groceries.txt
    git commit -m "add ingredients for tomato soup"
  9. Make a second commit including ONLY the changes to the yard.txt file. It should have the commit message “add items needed for garden box”

    1
    2
    git add yard.txt
    git commit -m "add items needed for garden box"
  10. Next up, add the following line to the end of groceries.txt
    - couple of seed potatos

  11. In the yard.txt file, change the first line so that it says “3 bags of potting soil” instead of “2 bags of potting soil”
    - 3 bags of potting soil
    - 1 bag of worm castings

  12. Make a commit that includes the changes to BOTH files. The message should read “add items needed to grow potatoes”

    1
    2
    git add .
    git commit -m "add items needed to grow potatoes"
  13. Use a Git command to display a list of the commits. You should see 4!

    1
    git log

文章內容如有錯誤,歡迎留言討論!


本 Blog 上的所有文章除特别聲明外,均採用 CC BY-SA 4.0 協議 ,轉載請註明出處!