Git作为目前为止最好用的分布式版本控制系统,在日常工作中应用很频繁,git命令很多但常用的只有十多个,之前在文章 Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践 |青训营 - 掘金 (juejin.cn) 中介绍了Git的配置工作与基本的提交一个文件,在本文中我们将更深入地学习关于git的命令。
一、版本回退
1.1 查看历史记录
当我们在工作中多次提交一个文件时,在git仓库里将会存在多个版本的文件,通过git log命令可以查案最近到最远的提交日志,并且能够显示每一次-m之后的记录内容
在命令行输入
git log
commit后显示哈希算法得到的id,HEAD指向当前提交到的仓库,master表示主仓库。Author后显示提交者信息,格式为用户名<邮箱>,在团队合作中我们可以通过这里看到该段修改是由谁上传的。Date指提交时间- 最后会显示提交时写入的提交信息,即注释"new file test.txt"
若输出内容太多可以在后面加上--pretty=online让界面更简洁,但一般情况下不建议使用。
1.2 回退
1.2.1回退到任意一个版本
当我们需要回退到第一个版本,需要获取回退的版本的ID,这里的ID通常取前8位就能找到需要的版本,当然也可以通过输入完整的ID号找到需要的版本。
第一个版本ID前8位为0923665,现在需要回退到第一个版本,在命令行输入:
git reset --hard 0923665
可以通过cat命令查看文件内容
cat test.txt
1.2.2 回退到当前仓库的版本
我们可以利用HEAD来迭代到我们仓库的某一个版本
若我们需要回退到主仓库中上一次提交的版本,利用^代表上一个版本,可以在命令行输入
git reset --head HEAD^
也可以通过~n表示向前回退n个版本,在命令行输入
git reset --head HEAD~4
1.2.3 回到未来的版本
当回退后再查看日志记录时,在此之后新的版本已经看不到了,可以通过reset命令回到新的版本,注意此时需要之前的版本id,可以通过命令行窗口找到回退之前显示的id,也可以利用git reflog命令,显示你每次的命令。
通过reset回到未来的某个版本
git reset --hard 5a894f55
此时再查看日志记录,其日志记录和文件内容都回来了。在此过程中,仅是把头指针做了修改,所以速度非常快。
二、git的修改
在之前的文章中我们介绍过我们通常将修改的文件都进行git add到暂存区,最后同时利用git commit提交到仓库。我们可以利用vim修改或添加内容,然后添加到暂存区,当我们需要二次修改时会发现一个问题,利用vim命令修改后若直接使用git commit命令提交到仓库,此时该文件仍然在修改状态,提交的是第一次修改的内容。
当我们使用git add添加到缓存区后,再次修改文件修改的是工作区,使用commit提交时,它只会找到暂存区的文件进行提交。所以我们如果进行了二次修改,需要再次执行git add命令提交至暂存区,再一起提交到仓库。
三、撤销修改
3.1 工作区撤销
在工作区进行修改时,利用git status确认为修改状态时,通过git restore命令进行撤回,此时将撤回到最近一次git add或git commit后的状态,即撤回命令不能撤回已经添加到暂存区的内容。当然,如果此时只需要删除编辑时修改内容的一部分,可以进入编辑状态修改。
git resotre test.txt
3.2 暂存区撤销
如果你想撤销的内容已经更新到暂存区了,可以利用git restore --staged命令,将文件的修改从暂存区撤销回工作区修改时的状态,相当于将你的上一步提交撤回了。
git restore --staged test.txt
但注意此时工作区的文件也处于修改状态,不会随着暂存区的撤销而撤销,你需要再对工作区进行一次撤销操作。
git restore test.txt
到此我们对Git的使用学习又进了一步,赶快去实践一下吧~