2018-08-23

2018-08-23  本文已影响0人  Eul_

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三个层次的影响

引用文章:https://segmentfault.com/a/1190000006185954

上一篇 下一篇

猜你喜欢

热点阅读