Git + GitHub 版本控制教學 (1) - 提交一個 commit
Git 最重要的功能之一就是 commit,也就是存檔的概念。我們可以隨時把檔案儲存,然後有需要時再隨時切回之前的版本。
Git 最重要的功能之一就是 commit,也就是存檔的概念。我們可以隨時把檔案儲存,然後有需要時再隨時切回之前的版本。
Working Directory, Staging Area and Repository
要了解 commit 前,先讓我們認識一下 Git 定義出來的狀態環境。Git 定義了三種狀態:working directory, staging area 跟 repository。讓我們想像一個例子:老師出了一個作業,讓學生們完成之後明天交出來。working directory 可以想像成是學生做作業的狀態。當這個學生寫完某個部份後,把這完成的作業放進書包裡,作業在書包裡的狀態可以想像成 staging area,概念就是準備提交的狀態。隔天把作業交出去了,作業收到老師那裡,這時候狀態可以想像成在 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 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 都是回到過去的版本,但實際的概念不太一樣,更多細節在之後文章可以看到。