如何理解git checkout -- file和git reset HEAD -- file

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000



首先需要知道工作区(working diretory)和暂存区(Stage)这两个概念。工作区的该概念不仅包含你实际操作、更改的文件还应当包括当前修改但未add存入暂存区的文件变化信息,暂存区的作用则是临时存储文件的变化信息,在git add file操作之后,暂存区中将记录file文件上的修改信息。暂存区的存在更细化了时间节点,要知道commit的往往是有重大改变的版本或者是在一次修改工作整体完成之后才使用commit。而在这之间需要保存的修改,自然需要一个缓存区暂时存放。
廖雪峰的git教程中在“撤销修改”部分中,提到了几种情景和相应的git checkout与git reset命令。通过我的分析,在这个更直接地分析这两个命令的含义。
  git checkout -- file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区
  git reset HEAD -- file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化
对照廖雪峰的git教程中相应的例子,能更好地体会上述总结。

时间: 2024-12-27 23:40:34

如何理解git checkout -- file和git reset HEAD -- file的相关文章

代码回滚:git reset、git checkout和git revert区别和联系

git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为它们非常相似,所以我们经常会搞混,不知道什么场景下该用哪个命令.在这篇文章中,我们会比较git reset.git checkout和git revert最常见的用法.希望你在看完后能游刃有余地使用这些命令来管理你的仓库. Git仓库有三个主要组成——工作目录,缓存区和提交历史.这张图有助于理解每个

git代码回滚:Reset、Checkout、Revert的选择

代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Home 2.1 快速指南 2.2 创建代码仓库 2.3 保存你的更改 2.4 检查仓库状态 2.5 检出之前的提交 2.6 回滚错误的修改 2.7 重写项目历史 3.2 保持同步 3.3 创建Pull Request 3.4 使用分支 3.5 常见工作流比较 4.1 图解Git命令 5.1 代码合并:

git reset and git checkout

git reset --hard <commit>: 1.替换引用的指向.引用指向新的提交ID; 2.替换暂存区.替换后,暂存区的内容和引用指向的文件夹树一致; 3.替换工作区.替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的文件夹树内容同样. git reset --soft <commit>: 1.替换引用的指向.引用指向新的提交ID. 即仅仅更改引用的指向,不该编暂存区和工作区. git reset --mixed <commit>或git reset

(转)git checkout 撤销修改

背景:学习git相关命令 git撤销修改和版本回退 git status查看当前仓库的状态 [email protected]:~/pad/pad-test$ git status 位于分支 master 您的分支与上游分支 'origin/master' 一致. 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: P

【git】Git branch &amp;&amp; Git checkout常见用法

git branch 和 git checkout经常在一起使用,所以在此将它们合在一起 1.Git branch 一般用于分支的操作,比如创建分支,查看分支等等, 1.1 git branch 不带参数:列出本地已经存在的分支,并且在当前分支的前面用"*"标记 1.2 git branch -r 查看远程版本库分支列表 1.3 git branch -a 查看所有分支列表,包括本地和远程 1.4 git branch dev 创建名为dev的分支,创建分支时需要是最新的环境,创建分支

git checkout 命令详解(转)

在日常的git操作中,git checkout——检出,是我们的常用命令.最为常用的两种情形是创建分支和切换分支. 在下面的命令中,使用了一些简写,在这里说明一下: git st # git status git ci # git commit git br # git branch git co # git checkout git mg # git merge git line # git log --oneline 当然,你也可以直接在git中敲命令,将这些简写添加到git配置中 git

git checkout 命令详解

在日常的git操作中,git checkout--检出,是我们的常用命令.最为常用的两种情形是创建分支和切换分支. 在下面的命令中,使用了一些简写,在这里说明一下: git st # git status git ci # git commit git br # git branch git co # git checkout git mg # git merge git line # git log --oneline 当然,你也可以直接在git中敲命令,将这些简写添加到git配置中 git

Git详解之六 Git工具(转)

Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你将领略到一些 Git 可以实现的非常强大的功能,这些功能你可能并不会在日常操作中使用,但在某些时候你也许会需要. 6.1  修订版本(Revision)选择 Git 允许你通过几种方法来指明特定的或者一定范围内的提交.了解它们并不是必需的,但是了解一下总没坏处. 单个修订版本 显然你可以使用给出的

Git内部原理之Git引用

本篇的主题是Git引用的原理. 首先来搞清楚什么是Git引用,前文讲了Git提交对象的哈希.存储原理,理论上我们只要知道该对象的hash值,就能往前推出整个提交历史,例如: $ git log --pretty=oneline 3ac728ac62f0a7b5ac201fd3ed1f69165df8be31 3ac728ac62f0a7b5ac201fd3ed1f69165df8be31 third commit d4d2c6cffb408d978cb6f1eb6cfc70e977378a5c