git checkout与git reset有什么区别吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git checkout与git reset有什么区别吗相关的知识,希望对你有一定的参考价值。
git checkout主要有三个作用:第一个就是切换分支。例如你从远程仓库clone下来所有的源代码,你git branch一下会看到你通常是在master,如果你想切换到某一个分支上呢?git checkout <branchname>
第二个就是放弃对某个文件的修改。例如你想放弃对某个文件Hello.cpp的修改,git checkout -- <Hello.cpp>
第三个就是新建一个分支,git checkout <-b> <branchname>,不加-b的话只新建不切换到新的分支上,加-b新建并切换到该分支上
git reset主要是取消上一次的操作,具体用法有很多,说两个:
第一个取消merge,git reset --hard ORIG_HEAD,这样会退回到merge前的代码。
第二个就是取消commit,git eset HEAD~<num> <-soft/-hard>,取消上num次的commit
第三个是将文件从stage(追踪的库)中移除,git reset HEAD <filename>
git和linux命令一样,非常的繁复,需要一点一点的学习,下面有个教程网站,非常不错,你遇到问题可以去看一下,比百度知道要权威多了
http://git-scm.com/book/zh/v1 参考技术A git checkout -- file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区
git reset HEAD -- file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化 参考技术B
git reset用于撤销操作。
git reset [--hard | --mixed | --soft] [<commit>]
--hard 会执行下图中操作123,参数hard会同时改变版本库的HEAD引用指向,缓存区内的内容,以及工作空间的内容,执行之后HEAD引用会指向commit指向的版本,同时缓存区内的内容也会以版本库HEAD指向的版本进行刷新,工作空间内的内容也会以HEAD引用指向的代码版本进行替代。
--mixed 会执行下图中操作12 在该参数的情况下,工作空间内的内容不会被刷新,只会更新HEAD引用的指向以及缓存区的内容
--soft 会执行下图中操作1 只会改变HEAD引用的指向
git checkout一般用于切换分支,也可以用来回退代码
git checkout branchName切换分支到指定的分支上,使用的时候,需要注意,使用该命令工作空间下的内容会被指定的分支内容覆盖,在之前分支上面所做的没有提交的变动会丢失。 如果需要新建一个分支并使用新的分支,我们可以使用git checkout -b dev,这样我们就新建了一个名为dev的分支,并切换到该分支下面。
该命令默认以HEAD引用来创建分支,需要需要使用指定的版本号来创建分支,可以在后面跟上版本号。
Git 重置reset,检出checkout和回滚revert(reverse)有什么区别?
checkout主要用来用暂存区的内容覆盖工作区,达到撤销工作区修改。另一个是用来切换和创建分支。
revert(reverse)回滚(反做):撤销某个commit的修改,保留其他commit的修改
参考文章:Git恢复之前版本的两种方法reset、revert(图文详解)
太TM难理解了,我已经完全懵逼了,日后再看视频教程吧
以上是关于git checkout与git reset有什么区别吗的主要内容,如果未能解决你的问题,请参考以下文章
Git 重置reset,检出checkout和回滚revert(reverse)有什么区别?
Git之深入解析reset命令原理以及与checkout命令的区别