查看全部修改内容:

查看指定文件修改内容:

  1. git diff <file>

回退到指定版本

  1. git reset --hard commit_id

回退到上一个版本

  1. git reset --hard HEAD^

回退到上上一个版本

  1. git reset --hard HEAD^^

回退到上n个版本

  1. git reset --hard HEAD~n

查看详细提交历史

  1. git log --pretty=oneline

查看分支合并图

  1. git log --graph

查看命令历史

  1. git reflog

说明

我们多次修改文件,如果不小心删除了某些东西,可以使用版本回退来实现复原

步骤

继续上一节的内容,修改readme.txt,增加了一行内容,执行:

  1. git status

结果如下:

  1. $ git status
  2. On branch master
  3. Changes not staged for commit:
  4. (use "git add <file>..." to update what will be committed)
  5. (use "git checkout -- <file>..." to discard changes in working directory)
  6. modified: readme.txt
  7. no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有提交修改。 此时,如果想查看具体我们修改了readme.txt的哪一部分内容,执行:

    结果如下:

    1. $ git status
    2. On branch master
    3. nothing to commit, working tree clean

    好了,经过多次提交之后,如果想退回到某个版本,先执行:

    1. git log

    结果如下:

    1. $ git log
    2. commit f09d57ce853e850551e8802b9a4be3643ba894c0 (HEAD -> master)
    3. Author: rumosky <rumosky@163.com>
    4. Date: Sun Nov 3 16:02:23 2019 +0800
    5. 第三次追加内容
    6. commit c3b8908ddddd8364ac8b2681b56e948885e49b1d
    7. Author: rumosky <rumosky@163.com>
    8. Date: Sun Nov 3 16:00:36 2019 +0800
    9. 第二次追加内容
    10. commit a82d91a6bb97b1acc158d98bc1f82697df938e3b
    11. Author: rumosky <rumosky@163.com>
    12. Date: Sun Nov 3 15:49:55 2019 +0800
    13. 第一次追加内容
    14. commit 69997611303057230d8fa50c81681bd823644553
    15. Author: rumosky <rumosky@163.com>
    16. 第一次提交

    可以看到有四次提交,其中,后面的一串字符是commit_id,若觉得日志内容很长,可以添加参数--pretty=oneline,结果如下:

    1. $ git log --pretty=oneline
    2. f09d57ce853e850551e8802b9a4be3643ba894c0 (HEAD -> master) 第三次追加内容
    3. c3b8908ddddd8364ac8b2681b56e948885e49b1d 第二次追加内容
    4. a82d91a6bb97b1acc158d98bc1f82697df938e3b 第一次追加内容
    5. 69997611303057230d8fa50c81681bd823644553 第一次提交

    回到上一个版本,结果如下:

    1. $ git reset --hard HEAD^
    2. HEAD is now at c3b8908 第二次追加内容

    现在,我们回退到了上一个版本,但是如果我们后悔了,想恢复到新版本怎么办? 没事,此时,先执行git reflog找到最新版的commit_id,结果如下:

    1. $ git reflog
    2. c3b8908 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    3. f09d57c HEAD@{1}: commit: 第三次追加内容
    4. c3b8908 (HEAD -> master) HEAD@{2}: commit: 第二次追加内容
    5. a82d91a HEAD@{3}: commit: 第一次追加内容
    6. 6999761 HEAD@{4}: commit (initial): 第一次提交

    第三次追加内容commit_idf09d57c,执行回退命令,结果如下:

    此时,查看readme文件,发现已经恢复了:

    1. $ cat readme.txt
    2. git is very famous!
    3. 第一次追加内容
    4. 第二次追加内容

    commit_id没有必要全部输入,至少输入前四位就可以找到该commit