我想拆分一个提交,但不确定使用哪个重置选项。

我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。

此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?

谁能给我一个工作流程的例子,如何选择3个选项会发生?


当前回答

mkarasek的回答很好,简单来说,我们可以说……

git reset——soft:将HEAD设置为预期的提交,但保持从上次提交开始的更改 Git重置-混合:它和Git重置一样-软,但唯一的区别是它从上次提交中UN stage你的更改 git reset——hard:在你指定的提交上设置HEAD,并重置你从上次提交的所有更改,包括未提交的更改。

——soft和——mixed有点相似,唯一的区别是,如果你想在暂存区中保留你的更改,使用——soft,如果你不想在暂存区中更改,使用——mixed。

其他回答

——soft:告诉Git将HEAD重置为另一个提交,这样索引和工作目录将不会以任何方式改变。在原始HEAD和提交之间更改的所有文件都将被暂存。

-mixed:就像软的,这将重置HEAD到另一个提交。它还将重置索引以匹配它,而工作目录将不会被触及。所有更改都将保留在工作目录中,并显示为已修改,但不是阶段性的。

——hard:这将重置所有内容——它将HEAD重置回另一个提交,重置索引以匹配它,并重置工作目录以匹配它。

-混合和-软之间的主要区别是你的索引是否也被修改。点击这里查看更多信息。

mkarasek的回答很好,简单来说,我们可以说……

git reset——soft:将HEAD设置为预期的提交,但保持从上次提交开始的更改 Git重置-混合:它和Git重置一样-软,但唯一的区别是它从上次提交中UN stage你的更改 git reset——hard:在你指定的提交上设置HEAD,并重置你从上次提交的所有更改,包括未提交的更改。

——soft和——mixed有点相似,唯一的区别是,如果你想在暂存区中保留你的更改,使用——soft,如果你不想在暂存区中更改,使用——mixed。

git reset命令各选项的基本区别如下。

——soft:只重置HEAD到你选择的提交。工作原理与git签出基本相同,但不创建分离的头部状态。 ——mixed(默认选项):将HEAD重置为您在历史记录中选择的提交,并撤消索引中的更改。 ——hard:将HEAD重置为您在历史记录中选择的提交,撤消索引中的更改,并撤消工作目录中的更改。

莫·阿里用最简单的方式解释了这一点,下面是另一个简单的解释:

——soft:重置HEAD指针指向上一次提交

——mixed:——soft + delete添加的更改

——hard:——混合+恢复工作树文件的变化(小心!)

-混合vs -软vs -硬:

--mixed:

   Delete changes from the local repository and staging area.

   It won't touch the working directory.

   Possible to revert back changes by using the following commands.

     - git add

     - git commit

   Working tree won't be clean.

--soft:

    Deleted changes only from the local repository.

    It won't touch the staging area and working directory.

    Possible to revert back changes by using the following command.

     - git commit.

    Working tree won't be clean

--hard:

    Deleted changes from everywhere.

    Not possible to revert changes.

    The working tree will be clean.

注意:如果提交被确认到本地存储库并放弃这些提交,我们可以使用:

 `git reset command`.

但是如果提交被确认到远程存储库,那么不建议使用reset命令,我们必须使用revert命令来丢弃远程提交。