• 结论
  • 说明
    • 步骤

    结论

    git工作区状态:

    1. git status

    查看全部修改内容:

    1. git diff

    查看指定文件修改内容:

    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

    查看简化提交历史

    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 diff

    结果如下:

    1. $ git diff
    2. diff --git a/readme.txt b/readme.txt
    3. index cc3b095..6b77a0b 100644
    4. --- a/readme.txt
    5. +++ b/readme.txt
    6. @@ -1,2 +1,3 @@
    7. git is very famous!
    8. -第一次追加内容
    9. \ No newline at end of file
    10. +第一次追加内容^M
    11. +第二次追加内容
    12. \ No newline at end of file

    知道修改了什么内容,就可以放心提交了,依次执行git add git commit -m ""即可,提交完毕,执行git status查看状态,显示如下:

    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. Date: Sun Nov 3 15:28:27 2019 +0800
    17. 第一次提交

    可以看到有四次提交,其中,commit后面的一串字符是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,执行回退命令,结果如下:

    1. $ git reset --hard f09d57c
    2. HEAD is now at f09d57c 第三次追加内容

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

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

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