git常用的撤销操作#附有详细实例讲解

在任何一个阶段,你都有可能想要撤消某些操作, 下面主要讲了几个关于不同情况下的撤销操作

命令集合

    • git commit --amend
    • git checkout -- file
    • git reset
    • git revert

git commit --amend

操作命令 意义 备注
git commit --amend 会将暂存区中的文件提交并且修改提交信息 如果自上次后未做任何修改,则只提交修改信息

实例:
例如你提交后发现忘记了暂存某些需要的修改,这时如果提交的话就会再生成一条提交历史,但是你可以这么做

git commit --amend
#最终你只会有一个提交——第二次提交将代替第一次提交的结果

撤销前:git常用的撤销操作#附有详细实例讲解_第1张图片
撤销后:
git常用的撤销操作#附有详细实例讲解_第2张图片

git checkout – file

命令 意义 备注
git checkout – file 还原成上次提交时的样子 你对那个文件做的任何修改都会消失

实例:
如果你并不想保留对 hello.txt 文件的修改怎么办?
这时候就可以使用

git checkout – hello.txt
#注意:你对那个文件做的任何修改都会消失——你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令

撤销前:
git常用的撤销操作#附有详细实例讲解_第3张图片
撤销后:
git常用的撤销操作#附有详细实例讲解_第4张图片

git reset

下面是高级用法来啦
重置HEAD操作

操作命令 意义 备注
git reset [–soft] 撤销上一次 git commit 仅移动 HEAD,不会改变索引和工作目录
git reset [–mixed] 它依然会撤销一上次 提交,但还会 取消暂存 所有的东西 回滚到了所有 git add 和 git commit 的命令执行之前
git reset [–hard] 撤销了最后的提交修改,包括暂存区和工作区的修改 注意:该操作不可逆,撤销了就没了,找不回来,这个如果不确定修改的文件内容是否需要保存就不建议使用

实例:
git reset操作和git reset --soft --mixed效果一样
想象以下出现这种情况,你提交了不想提交的内容,这时候只是想重新修改下再次提交,也就是想撤销提交不想撤销修改,那就可以使用下面的命令啦

git reset --soft HEAD^
#表示相对于HEAD的上一次,依次多个^表示撤销的是前面几次
#如果想撤销的是前面几次还可以指定hash-id

撤销前:
git常用的撤销操作#附有详细实例讲解_第5张图片
撤销后:
git常用的撤销操作#附有详细实例讲解_第6张图片
取消暂存区:
取消前:
git常用的撤销操作#附有详细实例讲解_第7张图片
取消后:
git常用的撤销操作#附有详细实例讲解_第8张图片
–mixed这个选项本质上和–soft没什么区别,目前只是撤销提交记录,不撤销修改内容
下面的–hard它的作用是一并连修改的内容都撤销回上次提交时
撤销前:
git常用的撤销操作#附有详细实例讲解_第9张图片
撤销后:
git常用的撤销操作#附有详细实例讲解_第10张图片
前面讲述了 reset 基本形式的行为,不过你还可以给它提供一个作用路径。 若指定了一个路径,reset 将会跳过重置提交,并且将它的作用范围限定为指定的文件或文件集合,它还有 取消暂存文件 的实际效果

git reset hash-id – file

实例:
撤销文件修改前
git常用的撤销操作#附有详细实例讲解_第11张图片
撤销文件修改后:

git常用的撤销操作#附有详细实例讲解_第12张图片

git revert

还有一种撤销方法,不过这种和前面的reset又不同,它会撤销上一次修改的内容,并且还会生成一次新的提交,
实例:
撤销前

git常用的撤销操作#附有详细实例讲解_第13张图片
撤销后:
git常用的撤销操作#附有详细实例讲解_第14张图片

这里总结下:

撤销的操作命令主要有git commit --amend git checkout,git reset,git revert
git commit --amend 会将暂存区中的文件提交并且修改提交信息,如果自上次后未做任何修改,则只提交修改信息|
git checkout命令不仅可以撤销文件修改而且也可以切换不同分支
git reset命令不同选项–soft --mixed --hard撤销的程度不同,但是–hard撤销是不可逆的,如果不确定要不要删除文件千万不要用这个选项
git revert命令可以在撤销中间提交的修改内容的同时保留所有的提交记录,并且生成新的提交,这个一般想修改中间版本提交的修改又不想破坏历史记录特别使用

以上命令不同情景下有不同的用途,大家可以根据实际情况灵活使用!

你可能感兴趣的:(git,git)