git中的HEAD
HEAD简介
HEAD在git版本控制中表示头节点,也就是当前分支的最后一次提交。同时它是<repo>/.git/HEAD文件,内容一般是:ref: refs/heads/main,本质是指上一次提交的hash值,比如se11d9be5cc7007995b607fb12285a43cd03154b。
HEAD~和HEAD^
在HEAD后加^和~是指以HEAD为基准,表示之前的版本。因为HEAD是当前分支的最新版本,因此HEAD~和HEAD^是指次新版本,也就是倒数第二个版本,HEAD~~和HEAD^^是指次次新版本,也就是倒数第三个版本。
HEAD~、HEAD^是HEAD~1、HEAD^1的简略形式。
HEAD~和HEAD^后加大于1的数字
最新提交之前的最近提交称之为父提交,一个分支可能有两个父提交,两个分支合并在一起时,这两个分支的原HEAD都会成为合并后的最新提交的父提交。
当HEAD~<num>表示在第一个父提交上后退<num>步,HEAD^<num>表示后退到第<num>个父提交上。比如HEAD~2表示后退两步,且每一步后退均在第一个父提交上,而HEAD^2表示后退一步,这一步后退到第二个父提交上,参见下例。
示例
HEAD~1:等同于HEAD~或HEAD^1或HEAD^,后退至HEAD之前的提交。HEAD^2:后退至当前分支的第二个父提交。HEAD~1^2:后退至HEAD之前的提交,再后退到当前分支的第二个父提交上,如果HEAD没有合并分支,则非法。HEAD@{2}:指向git reflog记录的整体操作的第三条操作(git reflog记录的整体操作从0开始)。HEAD~~:早于HEAD的2个提交。HEAD^^:早于HEAD的2个提交。

git在回退版本时HEAD~和HEAD^的作用和区别 HEAD~ vs HEAD^ vs HEAD@{} also known as tilde vs caret vs at sign
最后更新:
2022-06-08