git reset and git checkout

it2025-09-24  80

git reset --hard <commit>: 1.替换引用的指向.引用指向新的提交ID; 2.替换暂存区.替换后,暂存区的内容和引用指向的文件夹树一致; 3.替换工作区.替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的文件夹树内容同样. git reset --soft <commit>: 1.替换引用的指向.引用指向新的提交ID. 即仅仅更改引用的指向,不该编暂存区和工作区. git reset --mixed <commit>或git reset <commit>: 1.替换引用的指向.引用指向新的提交ID; 2.替换暂存区.替换后,暂存区的内容和引用指向的文件夹树一致; 即更改引用的指向及重置暂存区,可是工作区不变. 实例: git reset 仅用HEAD指向的文件夹树重置暂存区,工作区不受影响,相当于将之前用git add命令更新到暂存区的内容撤出暂存区.引用也未改变,由于引用重置到HEAD相当于没有重置. git reset HEAD 同上 git reset -- filename 仅将文件filename的修改撤出暂存区,暂存区中其它文件不该变.相当于git add filename的反向操作. git reset HEAD filename 同上 git reset --soft  HEAD^ 工作区和暂存区不改变,可是引用向前回退一次.当对最新提交的提交说明或提交不惬意更改时,撤销最新的提交一遍又一次提交. git reset HEAD^ 工作区不变,可是暂存区会回退到上一次提交之前,引用也会回退一次. git reset --mixed HEAD^ 同上 git reset --hard HEAD^ 彻底撤销近期的提交.引用回退到前一次,并且工作区和暂存区都会回退到上一次提交的状态.自上一次以来的提交所有丢失. -------------------------------------------------------------------------------------------------------------------------------------- git  checkout  git checkout <commit> [--] <paths> 1.<commit>是可选项,假设省略则相当于从暂存区进行检出.和reset命令大不同样:重置的默认值是HEAD,而检出的默认值是暂存区. 2.因此重置一般用于重置暂存区(除非使用--hard,否则不重置工作区),而检出命令主要是覆盖工作区(假设<commit>不省略,也会替换暂存区中对应的文件). 3.该命令不会改变HEAD的头指针,主要用于指定版本号文件覆盖工作区中相应的文件.假设省略<commit>,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中的相应文件. git checkout <branch> 1.会改变HEAD头指针.之所以后面的參数写作<branch>,是由于仅仅有HEAD切换到一个分支才干够对提交进行跟踪,否则仍然会进入"分离头指针"的状态.在"分离头指针"的状态下的提交并不能被引用关联到,从而可能丢失.所以该命令主要作用是切换分支. 2.假设省略<branch>则相当于对工作区进行状态检查. 实例: git checkout branch 检出branch分支,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区. git checkout 汇总显示工作区,暂存区与HEAD的差异 git checkout HEAD 同上 git checkout -- filename 用暂存区中的filename文件来覆盖工作区中的filename文件.相当于取消自上次运行git add filename以来(假设运行过)的本地改动 git checkout branch -- filename 维持HEAD的指向不变.用branch所指向的提交中的filename替换暂存区和工作区中对应的文件.会将暂存区和工作区中的filename直接覆盖 git checkout -- .或者git checkout . 会取消本地全部改动,相当于用暂存区的全部文件直接覆盖本地文件.

转载于:https://www.cnblogs.com/bhlsheji/p/4030528.html

最新回复(0)