Git 高级
Amanda Crawford-Adamo
Software and Data Engineer
.git/logs/refs/heads/ 目录下
| 功能 | Git Reflog | Git Log |
|---|---|---|
| 目的 | 显示本地仓库中的引用更新与重写 | 仅显示提交历史 |
| 范围 | 仅本地仓库 | 本地与远程仓库 |
| 内容 | 所有引用更新(提交、reset、merge 等) | 仅提交 |
| 持久性 | 临时(通常 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>
| 重置类型 | 命令 | 对工作区的影响 | 对暂存区的影响 |
|---|---|---|---|
| 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 高级