git diff和回退操作

在git提交环节,存在三大部分:working tree, index file, commit

这三大部分中:

working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。

commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。


总结一下:
git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。

git diff HEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)


补充“回退”操作:

未add之前:

git checkout .


add .之后:
git reset --hard //回滚到最近一次的代码,到未add.状态,回复代码为原来状态
git reset --mixed 回到add状态 == --hard
git reset HEAD

commit之后
git reset --soft HEAD^ //回滚最近一次的commit,到add.状态
git reset --soft HEAD~3 //回滚最近三次的commit

push之后
git revert commitNum 
git reset --hard commitNum //回滚到该commitNum处


git reset的几种mode:

--hard:重设index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。

--soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中。

--mixed:仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。

--merge--keep 保留working tree并丢弃一些之前的commit 


参考:

http://blog.csdn.net/hudashi/article/details/7664464

伯乐在线插播推荐几篇文章:《Git 两分钟指南》、《写给 Git 初学者的 7 个建议》、《图解 Git /图形化的 Git 参考手册》、《给 Git 中级用户的 25 个小贴士》、《让Git 水平更上一层楼的 10 个小贴士》。)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章