Git学习使用方法总结(4)

继续分享几个很有用的git 命令。

git reset

git reset有两个功能,当git reset 带具体文件名时,则是将某次提交的文件拷贝到暂存区(索引)。比如:

git reset HEAD^^ main.c

这时候暂存区保存的就是前两次提交的main.c文件的快照。

当这个命令不跟文件名时,则表示移动HEAD指针,使用该命令时添加不同参数会对HEAD指针、暂存区(索引)和工作目录产生不同的影响。使用的参数主要是–soft/mixed (default)/hard。下面就通过举例来说明这三个参数对HEAD指针、暂存区(索引)和工作目录的影响。

假设现在我们有一个文件file,并且对这个文件提交了两次,每次都有不同版本,分别是file.v1和file.v2,此时我们处于最新版本file.v2。然后使用命令

git --[soft/mixed/hard] HEAD^

使用–soft时,HEAD指针指向file.v1的那个版本,暂存区和工作区并没有什么改变。

使用–mixed时,除了HEAD指针指向file.v1的那个版本,暂存区也拷贝了file.v1的快照,但工作区并没有改变,还是file.v2。

使用–hard时,HEAD指针指向file.v1的那个版本,暂存区和工作目录都回滚到之前的版本,都变成file.v1。

当使用–soft和–mixed时,输入git log命令,会发现HEAD指向回滚的版本,最新的版本则无法显示,想要返回最新版本,可以先输入git log --reflog,查看所有提交,然后在输入git reset <newest-commit-id>来返回最新提交,或者输入git reset master(当前分支的名字)。当在工作区继续提交新的提交,那么HEAD指针就会返回当前最新提交。

使用–hard时,输入git log命令一样会发现无法显示最新的版本,通过git log --refloggit reset --hard也可以返回最新版本。但是如果在回滚版本后再做新的提交,那么HEAD指针会指向在回滚版本后的最新提交。比如现在有两个提交commit-id1,commit-id2,现在使用–hard回滚到commit-id1,在此基础上提交commit-id3,通过git log命令后会发现,只有commit-id1和commit-id3,commit-id2则不会存在。

git checkout

当你不小心对某个文件的内容搞混乱了,想恢复到之前的样子,这时候git checkout就派上用场了。(如果该文件已经添加到了暂存区,但还未提交,可以使用上面讲的git reset HEAD返回)

git checkout [commit-id] [--] filename

commit-id可以是HEAD,也可以是以前的提交,返回以前提交后,想要重新恢复到最新的版本,可以使用git checkout HEAD filename即可。此时HEAD指针不会移动。(测试过不加–也可以)

当后面带的是提交ID时,可以方便的将项目切换到其它提交上去。

git checkout commit-id  ##  git checkout HEAD^/master^^

此时HEAD指针指向comit-id对应的提交,工作区也会回滚到这次提交的内容。这时的HEAD指针称为游离指针(detached HEAD),游离指针指的就是HEAD指针指向了某次具体提交,而不是指向分支名(比如master)。当在游离态时,你依然可以在此提交上做新的提交,但是这种提交会在HEAD返回master后被git垃圾回收机制删除,除非你对这次提交创建了分支,使得有一个分支名来指向这次提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值