Git重置提交

1、重置工作区提交

本地编写的代码,未执行任何git命令时,处于工作区,可以使用:

git diff

来查看本地修改。如果想重置(清空)工作区的修改内容,可使用:

git checkout -- .

清空当前工作区目录下的所有修改。也可以指定文件名称,重置对某个文件的修改。

git checkout -- [filename]

2、重置暂存区的修改

本地编写的代码,可通过执行git add .命令将已修改的文件提交到暂存区。使用该命令后再使用git diff将不会看到任何输出。如果想查看暂存区的修改需要使用命令:

git diff --staged

如果想撤销暂存区的全部修改可以使用命令:

git reset .

3、撤销本地仓库的提交

提交到暂存区的代码可以使用git commit -m '"operate comment"提交到本地仓库,此时提交历史中会使用commit id标识本次提交(使用git log命令即可查看提交历史)。此时如果我们想撤销本次提交可使用如下两种方式:
(1)回到当前提交的上一次提交:
先使用git log找到本次提交的上一次提交的commitid,然后执行如下命令即可。

git checkout a28dsasd  (上次提交的commit id)

(2)使用reset命令,重置提交

git reset --hard HEAD~1

如果想重置之前的提交可以将HEAD~1改为想要重置的commit id即可。

PS:也可以使用 git reflog 查看重置过的提交,然后使用:

git reset --hard s2dsfa2

将重置过的提交再次恢复。

reset三种模式区别和使用场景
区别:
–hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

–soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

–mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

作者:carway
链接:https://www.jianshu.com/p/c2ec5f06cf1a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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