Learning Objectives
- 用 git diff 看出檔案改了哪幾行,再預存、提交一次
- 用 git log --oneline 快速瀏覽版本歷史
- 在 VS Code 裡用滑鼠完成 add 與 commit
- 用 .gitignore 忽略中間檔、記錄檔與含密碼的設定檔
每天都在做的事:改、比對、再提交
上一課建立了第一個儲存庫並完成第一次提交。之後的日常,就是不斷重複 「修改檔案 → 看看改了什麼 → 預存 → 提交」。這一課練習兩件事:
- 提交之前先用
git diff確認自己改了哪幾行,避免把不該送出的修改一起提交。 - 用
.gitignore告訴 Git 哪些檔案永遠不要管,例如執行時產生的暫存檔、記錄檔,以及存放密碼的設定檔。
還沒做過上一課的話,先完成「建立第一個儲存庫」,這一課的指令都接續在同一個
hello-git資料夾裡。
修改檔案、比對差異、再提交一次
已經提交過的檔案再被修改,就會變成「已修改(modified)」。這一段看看 Git 怎麼告訴你改了哪裡。
-
1
修改檔案:已修改(modified)
在
README.md加一行說明。git status顯示 Changes not staged for commit:檔案改了,但還沒 add。 -
2
git diff:看改了哪幾行
git diff列出工作目錄和上一個版本的差異:+開頭是新增的行,-開頭是刪除的行。 -
3
預存並提交
一樣是 add 再 commit。已經被追蹤的檔案也可以用
git commit -a -m "訊息"一次完成(-a只會包含已追蹤的檔案,新檔案還是要先 add)。如果剛剛的提交訊息打錯,可以用git commit --amend修改上一次的提交。 -
4
用一行看完歷史
git log --oneline把每個版本濃縮成一行,最新的在最上面。
不想打指令?用 VS Code 操作 Git
VS Code 內建 Git,剛剛的流程都可以用滑鼠完成:
- 「檔案 → 開啟資料夾」打開專案資料夾
- 點左側的「原始檔控制」圖示,按「初始化存放庫」(等於
git init) - 修改檔案後,在「原始檔控制」面板按檔案旁的 + 放進暫存區(等於
git add) - 在上方輸入提交訊息,按
Ctrl + Enter提交(等於git commit)
想看版本歷史,可以安裝「Git History」擴充功能。其他常用的圖形化工具還有 GitHub Desktop、PyCharm。
不過指令是所有工具的共同基礎,遇到問題時,看懂 git status 的訊息最可靠。
.gitignore:哪些檔案不該提交
git add . 會把資料夾裡的東西全部加進去,但有些檔案不應該進版本庫:
- 作業系統或編輯器自動產生的檔案:例如縮圖快取、IDE 的個人設定
- 程式執行或編譯產生的中間檔:例如 Python 的
__pycache__/、*.pyc、記錄檔*.log - 含有敏感資訊的設定檔:例如存放密碼、API 金鑰的
.env。這類檔案一旦推上公開的 GitHub,就要當作已經外流
在專案根目錄建立一個名為 .gitignore 的文字檔,一行寫一個規則:
| 寫法 | 意思 |
|---|---|
*.log |
忽略所有 .log 檔 |
*.[oa] |
同時忽略 .o 與 .a 檔 |
__pycache__/ |
忽略整個資料夾 |
!keep.log |
例外:前面忽略了 *.log,但這個檔案不要忽略 |
/pack/* 搭配 !/pack/icon/ |
忽略 pack 資料夾內容,但保留 icon 子資料夾 |
GitHub 官方整理了各種語言的範本(github/gitignore),建立儲存庫時也可以直接選 Python 範本。
實際使用 .gitignore
專案裡多了一些不想提交的檔案。看看寫好 .gitignore 前後,git status 有什麼不同。
-
1
撰寫 .gitignore
用編輯器建立
.gitignore,寫入要忽略的規則。cat指令可以顯示檔案內容。 -
2
被忽略的檔案不再出現
現在
git status只看得到.gitignore本身,debug.log、.env都不會出現,git add .也不會加入它們。.gitignore自己要提交,團隊成員才會共用同一套規則。 -
3
檢查哪些檔案被忽略
git status --ignored會另外列出被忽略的檔案,用來確認規則有沒有寫對。 -
4
提交 .gitignore;必要時強制加入
確實需要提交某個被忽略的檔案時,可以用
git add -f 檔名強制加入;但含密碼的檔案不要這樣做。
想一想:比對差異與忽略檔案
git status 顯示 Changes not staged for commit: modified: README.md,代表什麼?
修改了 hello.py 但還沒有 git add,想看看到底改了哪幾行,該用哪個指令?
git log --oneline 每一行開頭那串像 3f2a1c9 的文字是什麼?
下面哪個檔案最應該寫進 .gitignore?
重點精華回顧
- 改過的已追蹤檔案會顯示為「已修改(modified)」,要再
git add才會進入下一次提交。 git diff比對工作目錄與上一次的版本;-是刪掉的行、+是新增的行。git log --oneline一行顯示一次提交,開頭是提交的識別碼。- VS Code 的「原始檔控制」面板可以用滑鼠完成 add、commit 與 push,背後執行的仍是同樣的 Git 指令。
.gitignore列出不該提交的檔案(__pycache__/、*.log、.env);git status --ignored檢查規則是否生效。