git checkout commit-hash
最近使用 git 进行版本切换,理所当然地使用了 git reset
,然后发现自己非常艰难地切换回来……哪里出了问题,仔细一看 stack overflow,发现原来 git checkout xxx
才是切换 commit 的正确方法!
1 | $ git log --oneline -3 |
如上,如果需要切换到倒数第二次提交,所应该使用的命令应该是 checkout
加提交的哈希值。
1 | git checkout 74aeb85 |
输出
1 | Previous HEAD position was c18f295... third commit |
代表已经切换到了倒数第二次提交状态。注意:此时,你的 HEAD 指针处于游离状态。不建议进行代码提交修改。
如果需要切换回来,需要最后一次提交的哈希值。此时,使用 git log
+ 分支名
来显示:
1 | $ git log --oneline master |
然后 git checkout c18f295
就可以将 HEAD 指针移动回最后的提交了。
修正:git checkout 最后一次 commit hash 的做法是错误的,正确的做法是 git checkout 分支名。
1 | $ git checkout master |
之前我错误地以为 git checkout commit-3 后再 git checkout checkout-1 就能切换回来,其实不然,当前 HEAD 指针仍然处于游离状态。
HEAD 指针游离处理
如果不小心在指针游离的时候进行了提交,这次提交会留在匿名分支上,直接 push 某分支会发现 “already up to date” 的提示。
回到匿名分支
首先,如果你使用了 git checkout master
回到了正常分支,先使用 git checkout 匿名分支commidId
回到匿名分支(因为是匿名分支,所以当然没办法通过分支名 checkout,这里的 commit id 就是刚刚新提交时的 id)。
新建临时分支
使用命令 git checkout -b tempbranch
新建一个临时分支,用以固定匿名分支。
回到原分支并合并
git checkout master
回到主分支,然后 git merge tempbranch
就可以合并回来了。
参考
Git HEAD detached from XXX (git HEAD 游离) 解决办法
How can I switch my git repository to a particular commit
PS: 原来 git log
命令的正确退出方法是按一下 “q” 键,我一直都用 ctrl + c
暴力退出的…