Git 教程 - 工作流程

Jinku Hu 2023年1月30日 2018年7月19日
  1. git add
  2. git commit
Git 教程 - 工作流程

正如我們上節學到的,新增檔案或提交檔案基本上需要兩個步驟。

  • git add
    將檔案新增到暫存區,命令如下,
   $ git add test1.txt

file1.txt 將從工作區域新增到暫存區,並且它隨時可以被提交到倉庫。每當我們建立一個檔案時,它就在我們的工作區上(本地計算機上),然後在 git add 命令之後進入暫存區。

  • git commit
    它會將你的暫存區中的所有檔案都推送到倉庫。
   $ git commit -m "commit message"

我們通常會提交內容的時候也新增描述資訊,比如我們在檔案或專案中所做的更改,這樣我們可以在將來獲取此提交的日誌記錄資訊。

git add

更改並儲存檔案後,我們計算機上的檔案與我們的倉庫中的檔案就有了不同,因為在倉庫中的檔案仍然是此次修改之前的內容。

如果你鍵入 git status,可以看到 Git 已經知道你的檔案已被修改。

$ 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:   test1.txt

no changes added to commit (use "git add" and/or "git commit -a")

正如 Git 所建議的那樣,我們使用 git add 更新將要提交的檔案。

$ git add test1.txt

現在,你可以將此更新檔案從暫存區提交到倉庫。

有些時候,我們同時更新了多個檔案,我們當然可以用上面介紹的方式來新增所有的檔案,

$ git add test1.txt test2.txt test3.txt

但如果你有大量檔案或檔名太長,每個檔案加起來會有些繁瑣。Git 有一個快捷方式,可以將所有更新的檔案和未跟蹤的檔案新增到暫存區,

$ git add .

這裡,. 意思是與倉庫不同的所有檔案。

git commit

我們在介紹 Git 其他功能時已經講到了如何使用 git commit。基本上來講,git commit 將暫存區推送到倉庫,強烈建議你新增提交訊息來描述此次提交更改的內容,因為以後你可以用 git log 命令來獲取所有的已提交日誌資訊。

直接提交到倉庫

在我們提交之前,我們需要將更改新增到暫存區。然後我們就可以提交它們到倉庫。但實際上有時我們不需要將它們新增到暫存區的這個中間步驟,因為我們知道這是我們最終專案想要的,倉庫或伺服器上的這些更改是每個專案成員都需要進行更新的。

所以我們可以做的是先檢查 git status,來檢視工作區中修改了什麼。然後我們可以直接用 git commit 將這些修改提交到倉庫,不用將它們新增到暫存區。

$ git commit -a -m "commit message here."

我們這裡使用的是一個捷徑,不用將更改新增到暫存區。但這僅在某些情況下有用處,無論何時使用此命令,都需要小心,因為它將抓取工作區中的所有內容並將其直接推送到倉庫。

修改提交

我們可能在提交後遇到這種情況,我們在程式碼中發現了拼寫錯誤或其他微小錯誤。當然,你可以修改程式碼並再次將更改提交到倉庫。但是我們也可以做的就是我們重寫最近的一次提交,並且最新的提交將會被新的修改覆蓋。

git commit 後面的 --amend 標誌告訴 Git 這個提交將取代之前的提交,之前的提交以後不會在日誌訊息裡了。

$ git commit --amend -m "new information is updated"
注意!
永遠不要修改非最新提交,因為其他專案團隊成員或其他分支有可能是基於該提交的版本。在修改提交之後,他們的版本將會失去了參考,版本控制很難從中恢復。
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn