Git
HEAD
- 当前分支最近的一个提交
Index
- index也被称为staging area,暂存区,下个提交的文件集合
Working Copy
- 正在工作的那个文件集,叫做工作区
Flow
- 刚checkout一个分支,HEAD指向最近的一个提交,HEAD和Index(暂存区)和Working Copy(工作区)的文件集是一致的
- 修改,会提示git add,此时 Working Copy和Index、HEAD不一样
- git add后,working copy和index一样,但是他们和head不一样
- git commit后,创建一个新的commit,HEAD指向这个commit,三者又一致了
git reset
- 总的来说,git reset是用来将当前branch重置到另外一个commit的,这个动作可能会影响index和work tree
- 与checkout的区别
比如当前刚checkout到master
- A - B - C(HEAD, master)
如果你希望将master指向B,执行git reset B就可以移动HEAD到B
- A - B (HEAD, master) # - C is still here, but there's no branch pointing to it anymore
如果刚才运行的是git checkout B
- A - B(HEAD) - C(master)
这时候HEAD和master branch就不在一个点上了,你进入了detached HEAD STATE(如果这个commit没有和任何一个branch tip是一致的话),HEAD,work tree和index都指向了B,但是却已经是另外一个分支了,因为master branch依然指向C。 - Reset
reset本身做的事情就是重置HEAD到另外一个commit
比如,我们刚checkout到master,先如果执行git reset HEAD,任何事情都不会发生
如果git reset HEAD~1,HEAD会指向上一个commit- 参数 soft
HEAD会到另外一个commit上,index会存放所有差别集合,index和working copy一致 - 参数hard
HEAD会回到另外一个commit,且index和working copy也是 - 参数mixed(default)
默认参数,HEAD会回到另外一个commit,index也会,working copy存放差别集合
- 参数 soft
git revert
- 用于反转提交
revert用一个新的提交来消除一个历史提交所做的任何修改
revert后本地的代码会回滚到指定的历史版本,且git push既可以把origin代码更新,也不会有reset造成的冲突问题
git revert xxCommit
不同于reset,reset 是将HEAD往后移动,revert是往前,只不过是反向提交
参考
http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
http://www.cnblogs.com/kidsitcn/p/4513297.html
网友评论