Git 進階
Amanda Crawford-Adamo
Software and Data Engineer
.git/logs/refs/heads/ 目錄下
| 功能 | Git Reflog | Git Log |
|---|---|---|
| 目的 | 顯示本機版本庫中的參考更新與改寫 | 只顯示提交紀錄 |
| 範圍 | 僅本機版本庫 | 本機與遠端版本庫 |
| 內容 | 所有參考更新(commit、reset、merge 等) | 只有 commit |
| 保存性 | 暫時(通常 90 天) | 永久(屬於版本庫歷史) |
| 使用情境 | 復原遺失的提交、理解近期操作 | 檢視專案歷史、了解功能開發 |
git reflog
git reflog show
git reflog expire

| 元件 | 說明 |
|---|---|
| short-hash | 縮寫的提交雜湊 |
| ref | 通常為 HEAD,也可能是分支名稱 |
| index | 在 reflog 中的位置(0 為最新) |
| action | 操作類型(commit、reset、merge 等) |
| descriptions | 關於該操作的描述 |
since = 從此時間點之後的條目
git reflog --since "time-qualifer"
until = 截至此時間點為止的條目
git reflog --until "time-qualifer"
git reflog --since="1 week ago"
git reflog --until="yesterday"
git reflog --until="2024-01-01"
etl-feature 的分支「要如何還原 etl-feature 分支?」
git reflog
git checkout <hash>
git checkout -b <branch-name>
| Reset 類型 | 指令 | 對工作目錄的影響 | 對暫存區的影響 |
|---|---|---|---|
| Soft | git reset --soft <commit> |
無變更 | 變更維持已暫存 |
| Mixed(預設) | git reset --mixed <commit> |
無變更 | 變更變為未暫存 |
| Hard | git reset --hard <commit> |
變更被捨棄 | 變更被捨棄 |
「要如何回到先前可通過的 ETL 腳本變更?」
git reflog
git reset --soft HEAD@{1}
出錯時,Reflog 就像本機的時光機

Git 進階