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
相比有两个重要的差别
-
reset会把working directory里的所有内容都更新掉
-
checkout不会去修改你在Working Directory里修改过的文件
-
reset把branch移动到HEAD指向的地方
-
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干了这件事情:
-
更新了index区域里file文件的内容
-
更新了working directory里file文件的内容