git学习总结
1.Head* refers to branch(master,dev.......)
2.branch* (master,dev) refers to commit(d,c....)
3.git checkout的本质是改变HEAD*指针指向对应的commit 节点,
git checkout -b dev =1.git branch dev + 2.git checkout dev(dev will refer commit on branch:dev)
what differs between 'git checkout head file' and 'git checkout head' && 'HEAD' and 'head'
类似的git reset --pattern HEAD^^ 也是同样的原理
下面的过程表示了发生detached HEAD state的情况,HEAD所指向的e节点没有被任何branch所指向。(git checkout -b foo/git branch foo/git tag foo)
目录下三个区域:
1.HEAD (指向*最近一次的commit,保存相应的hashcode) path:.git/refs/heads/master
2.Index(暂存区) 只有Index区域里的东西才可以被commit
3.Working Directory (工作区)工程目录,项目文件。
checkout会修改HEAD的指向,侧重点在分支的切换,更新Index,Working Directory。
git checkout [354029b/head^/head~n] file
其实再问一遍自己,似乎并不清楚checkout的本质。。。
git reset是commit版本的向后回退,侧重点在分支的回退。
git reset (--soft --mixed --hard) [354029b/head^/head~n] file
--soft only change *head
--mixed change *head&&index
--hard change *head&&index&&working directory
git pull git pull origin branch-remote:branch-native
git fetch
总结:
1.git checkout,reset 操作本质上都是通过*HEAD指向的变化完成的
2.git 操作 对working space,index,commit三个层次的影响
网友评论