Git + GitHub 版本控制教學 (1) - 提交一個 commit

Git 最重要的功能之一就是 commit,也就是存檔的概念。我們可以隨時把檔案儲存,然後有需要時再隨時切回之前的版本。

Git + GitHub 版本控制教學 (1) - 提交一個 commit

Git 最重要的功能之一就是 commit,也就是存檔的概念。我們可以隨時把檔案儲存,然後有需要時再隨時切回之前的版本。

Working Directory, Staging Area and Repository

要了解 commit 前,先讓我們認識一下 Git 定義出來的狀態環境。Git 定義了三種狀態:working directory, staging arearepository。讓我們想像一個例子:老師出了一個作業,讓學生們完成之後明天交出來。working directory 可以想像成是學生做作業的狀態。當這個學生寫完某個部份後,把這完成的作業放進書包裡,作業在書包裡的狀態可以想像成 staging area,概念就是準備提交的狀態。隔天把作業交出去了,作業收到老師那裡,這時候狀態可以想像成在 repository。

working directory, staging area and repository

git add 這個指令就是把檔案加到 staging area,可以只加某個檔案: git add path/file  ,或是把所有檔案都加到 staging area: git add -A 。這動作就像是把作業放進書包一樣,是準備提交的狀態。因為還沒真正提交,你可以繼續編輯這些檔案,當在 staging area 的檔案被改動後,被改動的檔案會自動回到 working directory。

如果你用 git status 去檢查當下的狀態,綠色的部分是 staging area,紅色的部分是 working directory:

git status

git commit 這個指令是把你在 staging area 的檔案提交到 repository,特別注意它只會提交 staging area 的東西,working directory 的東西則保持一樣的狀態。

下了 git commit 他會跳到編輯界面,你先給 commit 的 message,然後存檔離開,它就會 commit 出去。你也可以下 git commit -m “一些訊息” 把訊息打在同一行李送出。

Commit Id

提交的這些 commits 到 Git 的 repository 裡會是有時間序的一條線,每個 commit 會被自動派發一個 commit id(如以下的例子 ffc7fdb 等)。在未來,我們可以使用這些 commit id 來回到之前的版本。

以下的例子來說,bdc6ef8 是最近一次提交的版本,如果我們想要回到更之前的版本,譬如 c0fbc52,可以用 git checkout c0fbc52 或是 git reset c0fbc52 。checkout 跟 reset 都是回到過去的版本,但實際的概念不太一樣,更多細節在之後文章可以看到。

Git + GitHub 版本控制教學 (2) - 分支 Branch
Git 中最主要的一項武器就是分支 Branch 的功能了。我們可以藉由開多個分支,同時開發不同的功能並且互不影響。在最開始的時候我們會有一個主要分支叫做 master or main(開始是 master,由於這個字帶一點歧視的味道所以慢慢開始用main 來代替),要做新的功能又不想影響主線的時候,我們就可以開新的分支。