在任何一个阶段,你都有可能想要撤消某些操作, 下面主要讲了几个关于不同情况下的撤销操作
git commit --amend
操作命令 | 意义 | 备注 |
---|---|---|
git commit --amend | 会将暂存区中的文件提交并且修改提交信息 | 如果自上次后未做任何修改,则只提交修改信息 |
实例:
例如你提交后发现忘记了暂存某些需要的修改,这时如果提交的话就会再生成一条提交历史,但是你可以这么做
git commit --amend
#最终你只会有一个提交——第二次提交将代替第一次提交的结果
撤销前:
撤销后:
git checkout – file
命令 | 意义 | 备注 |
---|---|---|
git checkout – file | 还原成上次提交时的样子 | 你对那个文件做的任何修改都会消失 |
实例:
如果你并不想保留对 hello.txt 文件的修改怎么办?
这时候就可以使用
git checkout – hello.txt
#注意:你对那个文件做的任何修改都会消失——你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令
撤销前:
撤销后:
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
撤销前:
撤销后:
取消暂存区:
取消前:
取消后:
–mixed这个选项本质上和–soft没什么区别,目前只是撤销提交记录,不撤销修改内容
下面的–hard它的作用是一并连修改的内容都撤销回上次提交时
撤销前:
撤销后:
前面讲述了 reset 基本形式的行为,不过你还可以给它提供一个作用路径。 若指定了一个路径,reset 将会跳过重置提交,并且将它的作用范围限定为指定的文件或文件集合,它还有 取消暂存文件 的实际效果
git reset hash-id – file
实例:
撤销文件修改前
撤销文件修改后:
git revert
还有一种撤销方法,不过这种和前面的reset又不同,它会撤销上一次修改的内容,并且还会生成一次新的提交,
实例:
撤销前
撤销后:
这里总结下:
撤销的操作命令主要有git commit --amend git checkout,git reset,git revert
git commit --amend 会将暂存区中的文件提交并且修改提交信息,如果自上次后未做任何修改,则只提交修改信息|
git checkout命令不仅可以撤销文件修改而且也可以切换不同分支
git reset命令不同选项–soft --mixed --hard撤销的程度不同,但是–hard撤销是不可逆的,如果不确定要不要删除文件千万不要用这个选项
git revert命令可以在撤销中间提交的修改内容的同时保留所有的提交记录,并且生成新的提交,这个一般想修改中间版本提交的修改又不想破坏历史记录特别使用
以上命令不同情景下有不同的用途,大家可以根据实际情况灵活使用!