提要
//查看git操作日志
$ git log
//單行格式查看操作日志
$ git log --pretty=oneline
//還原操作到上一次版本,有幾個^就上幾次
$ git reset --hard HEAD^
//還原操作到某一次版本,后面的是版本code
$ git reset --hard e6ded2
//撤銷修改,在add之前的修改,撤銷工作區中的修改
$ git checkout -- testgit.txt
//撤銷修改,在add之后的修改,撤銷到add前
$ git reset HEAD testgit.txt
//刪除工作區中的文件
$ rm test.txt
一、版本查看
多次提交后可以通過指令查看歷史提交記錄
$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date: Sat Jul 1 11:23:53 2017 +0800
test commit,2 files is commited
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date: Sat Jul 1 10:47:47 2017 +0800
readme file
以上是詳細信息的版本,可以使用指令只呈現一行,看起來比較清晰
$ git log --pretty=oneline
e6ded21d1de20d8ea2b847e9a35ac50fcabfac70 (HEAD -> master) test commit2
a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 test commit,2 files is commited
81a320cda2e80405cb9e4c92c236bc7289eaf0f8 readme file
這個是又提交了一次的歷史log,--pretty=oneline表示用一行的格式顯示提交
前面一串是提交版本的id,HEAD表示當前版本,id后面跟着的是提交的content
二、版本回退
查看指令后如果最近一次提交有錯誤想要回退到前一次,可以使用指令重置,類似於游戲里的讀檔
$ git reset --hard HEAD^
HEAD is now at a50498c test commit,2 files is commited
使用指令reset就可以還原到某一次提交,HEAD^表示還原到上一個版本,如上例中的a50498c 版本
有幾個^就回退幾個版本,如果版本較多可以寫成HEAD~n,n代表回退的版本個數
此時再查看log
$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date: Sat Jul 1 11:23:53 2017 +0800
test commit,2 files is commited
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date: Sat Jul 1 10:47:47 2017 +0800
readme file
三、回退錯誤的還原
此時最后一次的提交log已經沒有了,如果還原錯了,只要有最后一次提交的版本id,也是可以撤銷還原的,再回到最后一次的版本
$ git reset --hard e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
HEAD is now at e6ded21 test commit2
如果你找不到id,git提供了一個指令,可以回溯你的每一次操作,即使你關掉了git bash 第二天再打開,也是可以看到記錄的
$ git reflog
e6ded21 (HEAD -> master) HEAD@{0}: reset: moving to e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
a50498c HEAD@{1}: reset: moving to HEAD^
e6ded21 (HEAD -> master) HEAD@{2}: commit: test commit2
a50498c HEAD@{3}: commit: test commit,2 files is commited
81a320c HEAD@{4}: commit (initial): readme file
在這里就能找到最后一次提交的id是e6ded21,然后再reset到這個版本就好了
四、撤銷修改
撤銷修改有兩種場景
4.1在add進暫存區之前的修改撤銷
當你在工作區修改了一部分文件,但是又想舍棄修改的時候,一個一個還原會很麻煩,這時git提供了一個指令
$ git checkout -- testgit.txt
git checkout -- 文件名,指對這個文件進行還原,--很重要,如果不加--表示切換到某個分支
4.2在add進暫存區之后的修改撤銷
如果你要舍棄的修改已經add到了暫存區,需要使用以下指令
$ git reset HEAD testgit.txt
git reset HEAD 文件名,表示將當前master分支暫存區的文件testgit.txt unstage到工作區,然后在使用checkout指令撤銷修改即可
五、文件刪除
如果你新建了一個文件,並且add、commit到了本地分支,然后你想把他刪除,可以使用以下指令
$ rm test.txt
rm 我猜是remove的意思,這個指令只是刪除工作區中的文件,git會檢測到test.txt 有修改
此時如果確實要刪除文件並提交,需要先執行git中的文件刪除,即相當於把刪除的修改add到暫存區,再進行提交
$ git rm test.txt
rm 'test.txt'
$ git commit -m "delete test.txt"
[master e8c7ff0] delete test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
若是誤刪,和上面修改文件還原操作一致,先使用git reset HEAD filename ,再使用git checkout -- filename,進行還原