git reset、git revert和 git checkout有什么区别

git reset、git revert和 git checkout有什么区别

首先需要了解 git 仓库的三个组成部分:工作区(Working Directory)、暂存区(Stage)和历史记录区(History)

  • 工作区:在git 管理下的正常目录都算是工作区,我们平时的编辑工作都是在工作区完成
  • 暂存区:临时区域。里面存放将要提交文件的快照
  • 历史记录区:git commit 后的记录区

三个区的转换关系以及转换所使用的命令:

图片说明

git reset、git revert 和 git checkout 的共同点:用来撤销代码仓库中的某些更改。

然后是不同点:

从commit 层面来说

  • git reset 可以将一个分支的末端指向之前的一个commit。然后再下次 git 执行垃圾回收的时候,会把这个commit 之后的 commit 都扔掉。git reset 还支持三种标记,用来标记 reset 指令影响的范围

    --mixed:会影响到暂存区和历史记录区。也是默认选项

    --soft:只影响历史记录区

    --hard:影响工作区、暂存区和历史记录区

    --git checkout 可以将HEAD 移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要stash 或者commit 暂存区和工作区的更改

注意:因为git reset 是直接删除commit 记录,从而会影响到其他开发人员的分支,所以不要在公共分支(比如develop)做这个操作。

  • git revert 和 git reset 的目的是一样的,但是做法不同,它会以创建新的 commit 的方式来撤销 commit,这样能保留之前的 commit 历史,比较安全。另外,同样因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。

从文件层面来说

git reset 只是把文件从历史记录区拿到暂存区,不影响工作区的内容,而且不支持 --mixed、--soft 和--hard。

git checkout 则是把文件从历史记录拿到工作区,不影响暂存区的内容。

git revert 不支持文件层面的操作。

前端工程化 文章被收录于专栏

前端工程化

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 16:06
已编辑
快手电商 后端 23k-35k
点赞 评论 收藏
分享
耀孝女:就是你排序挂了
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务