git reset soft,mixed和hard之间的区别

/ 转载 / 1 条站内评论 / 447浏览

前言

译注:为了避免丢失本地的修改以及originalHEAD,建议在进行reset操作之前,在本地创建一个新的branch,在新的branch上面进行reset,以保证master分支永远处于originalHEAD

reset命令。混乱、误解、误用。但它并不需要那样!一旦你弄清楚发生了什么,这真的不会让人感到困惑。

Definitions)定义

首先,我们定义几个术语。

HEAD)头

这是当前分支的提示的别名,这是您最近对该分支提交的提交。

Index)指数

索引(也称为暂存区域)是将成为下一个提交的文件集合。这也是将成为 HEAD父母的承诺

Working Copy)工作副本

这是您在文件系统中使用的当前文件集的术语。

Flow

当您第一次签出分支时,HEAD指向分支中最近的提交。HEAD中的文件(它们不是技术上的文件,它们是blob,但为了讨论的目的,我们可以将它们视为直接文件)与索引中文件的文件相匹配,并且在工作中检出文件复制HEAD和索引。所有3个处于平等状态,Git很高兴。

当你对一个文件进行修改时,Git注意到并说:“哦,嘿,一些东西已经改变了。您的工作副本不再匹配索引和HEAD。“因此它将文件标记为已更改。

然后,当你做一个时git add,它将索引中的文件分级,Git说:“哦,好吧,现在你的工作副本和索引匹配,但是这些都不同于HEAD。”

然后git commit当你执行一个,Git创建一个新的提交,HEAD现在指向并且索引和工作副本的状态匹配它,以便Git再次开心。

Reset

如果你只看自己的重置命令,它所做的就是将HEAD(当前分支的顶端)重置为另一个提交。例如,假设我们有一个分支(这个名字并不重要,所以我们称它为“super-duper-feature”),它看起来像这样:

HEAD-最新

如果我们执行:

> git reset HEAD

… 什么都没发生。这是因为我们告诉git将这个分支重置到HEAD,这是它已经存在的地方。但是如果我们这样做:

> git reset HEAD~1

(HEAD〜1是“HEAD之前的提交权”的缩写,或者换句话说,“HEAD的父”)我们的分支现在看起来像这样:

HEAD-父

如果我们再次从最新的提交开始并执行:

> git reset HEAD~2

我们的分支将如下所示:

HEAD-家长家长

同样,它在基本级别上的所有功能都是将HEAD移到另一个提交。

参数

所以重置命令本身非常简单,但这是造成混淆的参数。主要参数是softhardmixed这些告诉Git执行重置时如何处理索引和工作副本。

Soft

--soft参数告诉Git将HEAD重置为另一次提交,但就是这样。如果你指定--softGit会在那里停下来,没有别的东西会改变。这意味着索引和工作副本不会被触及,所以在原始HEAD和您重置的提交之间发生变化的所有文件似乎都将被暂存。

复位-WC-指数改变的

Mixed (default)

--mixed参数(这是默认的,如果你不指定任何东西)将重置前往另一个承诺,并且将重置与之相匹配的索引,但会停在那里。工作副本不会被触及。因此,原始HEAD和重置为的提交之间的所有更改仍处于工作副本中,并且显示为已修改,但未暂存。

复位-WC-改变

Hard

--hard参数会将所有内容都删除 - 它将HEAD重置为另一个提交,重置索引以匹配它,重置工作副本以匹配它。这是命令中更危险的地方,并且可能会导致损坏。数据可能会在这里丢失*!

复位所有快乐


你可以使用它恢复它,git reflog但这在这里超出了范围。

转载自:https://davidzych.com/difference-between-git-reset-soft-mixed-and-hard/

  1. SAn

    selenIUM自动测试:git reset soft,mixed和hard之间的区别 - SAn Blog

    回复
召唤蕾姆
琼ICP备18000156号

鄂公网安备 42011502000211号