git的各种HEAD以及使用示例

gitrevisions - git docs
git-rev-parse - git docs中文

HEAD

命名工作区中的更改所基于的提交。
这个很常用了,HEAD为当前分支最新提交,经常用HEAD^HEAD^^^HEAD~n来定位之前的提交。

# 清除工作区和暂存区的所有修改
git reset --hard HEAD
# 恢复到上一个提交
git reset --soft HEAD^

FETCH_HEAD

记录您上次调用 git fetch 时 从远程仓库获取的分支。
git fetch origin master会将FETCH_HEAD设置为origin/master
git pull origin master(默认--no-rebase)相当于

git fetch origin master
git merge FETCH_HEAD

如果是git pull --rebase origin master,相当于

git fetch origin master
git rebase FETCH_HEAD

如果想直接用远程分支覆盖当前分支,则

git fetch origin master
git reset --hard FETCH_HEAD

ORIG_HEAD

命令(git am、git merge、git rebase、git reset)时创建的, 用于记录这些命令执行前HEAD的位置, 以便于将分支的顶端 改回执行这些命令前的状态。
与危险操作有关,可以快速取消危险操作git reset --hard ORIG_HEAD
我最常用的还是撤销一个提交并重做,用于修改上一个commit

git reset --soft HEAD^
# 做一些编辑修改...,把修改add之后,重新提交,用-c ORIG_HEAD参数即可复用之前reset的提交信息
git commit -c ORIG_HEAD

对比git commit --amend和好处是可以把commit的内容先恢复到暂存区,在编辑器中可以看到commit的修改。

其他HEAD

以下HEAD我用得比较少。
MERGE_HEAD
记录您在运行 git merge 时 要合并到分支中的提交。
REBASE_HEAD
会记录当前停止操作的提交, 原因可能是冲突或 交互式变基中的 edit 命令。
REVERT_HEAD
记录您在运行 git revert 时要还原的提交。
CHERRY_PICK_HEAD
会记录您在运行 git cherry-pick 时 要 cherry-pick 的提交。
BISECT_HEAD
记录运行 git bisect --no-checkout 时 要测试的当前提交。
AUTO_MERGE
当合并操作导致冲突时, 记录与 ort 合并策略写入工作树的状态 相对应的树对象。

posted @ 2025-11-09 17:05  三月妻三月七  阅读(9)  评论(0)    收藏  举报