我们可以用 rest来滚动git版本。使用log来查看本地仓库的版本
$ git log
会给出对此仓库的所有操作。如果日志比较多,就无法显示完全,linux 翻页的常规操作:空格:下一页,p 前一页,q 退出 。
我们可以美化一下
git log --pretty=oneline
则会在一行中打印出日志。还可以更简单一点:
git log --oneline
还有一个常用的,查看所有日志
git reflog
我们可以使用reset设置当前的版本,以删除文件找回为例。
我们新建一个c.txt,并把它添加到仓库。
touch c.txt git add c.txt git commit -m "add c.txt"
#使用reflog查看
git reflog
然后我们删除 c.txt.并且提交到本地仓库。
rm c.txt git commit -am "del c.txt"
我们使用 git reset --hard (指针位置) 就可以回滚。
git reset --hard bb9181d
这样我们删掉的c.txt就找回了。
我们注意到有个参数
--hard : 同时修改 工作区 缓存区 本地仓库的文件内容
--mixed: 同时修改 缓存区 本地仓库的文件内容
--soft: 只修改本地仓库的文件内容
此外,如果我们有修改提交到缓存区(add),但是还没有提交到本地仓库(commit).我们可以直接reset,清空缓存区的内容
git reset HEAD
如上图示,我们删掉了c.txt,并且add到缓存区,还没有commit到本地仓库。则。可以使用 git reset HEAD ,清空缓存区。
还可以 指定文件名,清空某个文件的缓存。
例如:
我们先改动文件 README 文件,内容如下:
# Runoob Git 测试
# 菜鸟教程
hello.php 文件修改为:
<?php echo '菜鸟教程:www.runoob.com'; echo '菜鸟教程:www.runoob.com'; echo '菜鸟教程:www.runoob.com'; ?>
现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:
$ git status -s M README M hello.php $ git add . $ git status -s M README M hello.php $ git reset HEAD hello.php Unstaged changes after reset: M hello.php $ git status -s M README M hello.php
现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。
$ git commit -m '修改' [master f50cfda] 修改 1 file changed, 1 insertion(+) $ git status -s M hello.php
可以看到 hello.php 文件的修改并未提交。
这时我们可以使用以下命令将 hello.php 的修改提交:
$ git commit -am '修改 hello.php 文件' [master 760f74d] 修改 hello.php 文件 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working directory clean
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。