赞
踩
每个 Git 仓库中,都有一个隐藏目录 .git
用于存放 Git 仓库的相关信息,包括暂存区(称为 stage)、自动创建的 master 分支以及指向 master 分支的 HEAD
指针。
每次提交文件时:
git add
添加文件到暂存区。git commit
提交更改,把暂存区的所有内容一次性全部提交到当前分支,清空暂存区。因为暂存区的存在,撤销修改分为几种情况(通过 git status
查看仓库状态时会提示相关撤销修改的命令):
git status 一般有三个状态:
changes to be committed -- 表示,已经提交到暂存区的文件,一般是 untracked files 根据 git add 提交上来的文件
changes not staged for commit -- 表示,即在工作区又在暂存区的文件,且文件在工作区被修改,还没有提交到暂存区
untracked files -- 表示,只在工作区,没有提交到暂存区的文件,不受版本控制,需要git add 提交到暂存区,之后为 changes to be committed 状态。
changes not staged for commit 和 untracked files 都是工作区修改,不同的是
changes not staged for commit 工作区对git版本库已存在的文件的修改
untracked files 工作区对git版本库未存在的文件(不收版本库控制)的修改(添加)
git checkout -- 文件名
撤销工作区的改动(回到跟版本库一样的状态,即回到最近一次 git commit
时的状态,所有改动全部清除)git reset <文件名>
撤销 git add
操作(此时更改仍留在工作区),再执行 git checkout -- 文件名
清除工作区的改动git checkout -- 文件名
撤销工作区的改动,再用 git reset <文件名>
撤销 git add
操作(此时更改仍留在工作区),最后执行 git checkout -- 文件名
清除工作区的改动通过 git checkout -- 文件名
命令可以撤销文件在工作区的修改。
通过 git reset 文件名
命令可以撤销指定文件的 git add
操作,即这个文件在暂存区的修改。
通过 git reset
命令可以撤销之前的所有 git add
操作,即在暂存区的修改。
git checkout -- 文件名
命令中的--
表示命令行在--
之后没有更多的选项。这样的好处是,如果碰巧有一个分支与文件名重名,仍然可以恢复该文件,而不是切换到同名的分支。
扩展一下:git checkout 不仅可以对分支切换创建做操作,也能对文件恢复做操作,
对分支切换创建做操作,可以用 git switch 替代
也能对文件恢复做操作,可以用git reset和git resotre 等作为替代
git checkout 操作是git早期版本的用法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。