git reset,git checkout区别

https://www.cnblogs.com/houpeiyong/p/5890748.html

git reset  HEAD~1  将HEAD指向倒数第二次提交,最后一次提交删除,文件还在

git checkout 将HEAD指向某个分支,当前的文件保存为快照,

https://segmentfault.com/a/1190000006185954

前面讲到checkout是会修改HEAD的指向,变更Index区域里的内容,修改Working Directory里的内容。

这看上去很像reset --hard,但和reset --hard相比有两个重要的差别

  1. reset会把working directory里的所有内容都更新掉

  2. checkout不会去修改你在Working Directory里修改过的文件

  3. reset把branch移动到HEAD指向的地方

  4. checkout则把HEAD移动到另一个分支

第二个区别可能有点难以理解,举例来说:假设你有两个分支master和develop,这两个分支指向不一样的commit,我们现在在develop分支上(HEAD指向的地方)

如果我们git reset master,那么develop就会指向master所指向的那个commit。

如果我们git checkout master,那么develop不会动,只有HEAD会移动。HEAD会指向master。看图:

带文件参数

当执行git checkout [branch] file时,checkout干了这件事情:

  1. 更新了index区域里file文件的内容

  2. 更新了working directory里file文件的内容

posted @ 2017-11-13 23:10  xqnq2007  阅读(334)  评论(0编辑  收藏  举报