我們可以用 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 添加,但不希望包含在下一提交快照中的緩存。