Git 常用命令详解

            前面一遍已经讲了大概git的使用,本人还是建议读者使用命令行的形式使用,这一篇就拿几个常见的命令,详细分析下


命令详解(这几个命令比较容易混淆,所以特别拿出来讲讲)

1、回退命令有以下几个,git reset ,git checkout ,  git revert 

git reset

reset是git中回滚版本的重要命令,在git中,它就像一把游标卡尺,可以上下游动,根据不同,命令默认分支master会将指针移动到指定的版本

(官方写法)reset有两种语法,分别是

git reset [-q] [<commit>] [--] <paths>

git reset [--soft | --mixed | --hard | --merge | keep] [-q] [<commit>] 

几个参数简单说一下,-q 是版本号(也可以用HEAD头指针变量表示),commit这个参数可以省略不写(一般也不写,不写默认HEAD头指针)

git 这两种用法都十分常见,也必将容易混用,先说第一种

这个命令,准备来讲是不会改变引用的指向(版本指向),也不会改变你的工作区内容,它只是将你暂存区的内容替换成-q版本的内容;(暂存区只add后的区域)

通俗来讲就是你本地add的内容,会被重置掉,可以用git status来查看里面的变化。LZ建议每条命令都自己尝试验证一下。

这个命令一般就只需要 git reset HEAD -- xx就可以了,指回退暂存区到当前版本;如果你好奇,当然也可以用非当前版本号重置,比如git reset HEAD~ -- xx,这样做没什么太大意义,

你执行完后,在git status,还是会提示你执行一次git reset HEAD -- xx,截图(HEAD是变量,代表当前版本,HEAD~就代表前一个


另外,reset还可以处理一些unmerge文件的问题,比如:

git checkout file_Name.t
error: path 'first_Name.txt' is unmerged
解决如下:

git reset first_Name.txt
git checkout first_Name.txt
-- 来自于stackoverflow

第二种命令,在我看来才是真正的版本回退,一般用其中三个参数,也是reset的核心所在;具体用法如下

-- hard 硬重置,这个是最彻底也是最危险的重置命令,因为它是把你本地库所有区域的内容(源码和暂存区),都重置成远程版本,如果你本地修改没有add或者commit,貌似没有办法还原(LZ找半天也没发现啥办法,add貌似还可以),为了理解这个过程,在附一张截图


hard命令,会执行步骤1,2,3,首先将引用指向新的commit 版本号,在讲2暂存区替换成新版本内容,最后将1的源码替换成暂存区内容,简单的就是你本地所以信息已变成版本库里的内容。。所以,在此特别需要谨慎。误操作了,本文就不提供解决方案了。

--mixed,git 默认级别,不写也可以,它做的事是执行1,2,源码中的修改还是没有被覆盖的;

--soft,最低级别,只执行了1,这个也不常用,考虑它的使用场景,我的理解是,这个可能是本人修改了代码并且提交到暂存区,但是没想到别的项目成员,又提交了一次,我像继续我之前的版本,那么就可以这么做。这个使用场景类似于git分支,不同业务可以再不同分支中同时进行,深入了解可以看这边博文 http://www.open-open.com/lib/view/open1328069889514.html#articleHeader10 

git checkout

checkout命令在git中十分强大,它有检出到工作区和切换分支这两个强大功能,

其中检出到工作区等同于回退本地修改操作,先说前者

官网写法 git checkout [-q][<commit>] [--] <paths>

commit可省略,默认的是从暂存区检出,在前面的图那就是执行了3操作

还原单个文件或目录 git checkout -- xx   注意xx前面有空格,这句话就是讲xx目录或文件内容替换成当前暂存区的内容(反着说了,官方说法是从暂存区检出到工作区)

checkout还有检查和切换分支的功能,这个也是checkout比较高级的功能,两种写法,写法如下

git checkout [<branch>]

表示为,将当前分支(一般是master切换到branch分支)其中branch为分支名称,可以默认不写,不写git checkout 就是检查当前分支

git checkout [-m] [[-b] --orphan] <new _brach> [<start_point>]

第三种用法主要是创建和切换到新的分支,新的分支从<strat_point>指定的提交开始创建(这个比较难理解,后续再补充),目前先看图说话


看具体命令 

git checkout 和 git checkout HEAD   检查当前分支
git checkout -- xx文件 用暂存区文件覆盖xx文件,相当于取消本地修改
git checkout branch-- xx文件,用branch所指向的提交的xx文件替换暂存区和工作区的文件。危险操作,直接覆盖(源码和暂存区)
git checkout -- .和git checkout . 和git checkout -- xx类似,.代表所有文件,用暂存区所有文件覆盖本地文件,危险操作

 git revert 

 git revert 是三个命令中,最简单的命令,不是很常用

它的重置原理是,撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交

例如 远程仓库初始版本为0,我再当前版本新增一个a文件,提交到远程仓库,版本号为1,现在我想回退到前一个版本(没加a文件),那么

执行这句代码  git revert HEAD ,这句代码是一次新的提交,push一下,远程仓库变成了2,其中2,和0内容一样

它的执行过程其实是先把0版本内容检出暂存区,再提交。

个人认为强大的reset完全可以更高效



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值