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

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

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

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


当前回答

简单回答这3个选项在什么情况下使用:

在代码中保留当前的更改,但要重写提交历史:

soft:你可以一次性提交所有内容,并使用新的描述创建一个新的提交(如果你使用tootise git或任何其他大多数gui,这是一个可以使用的,因为你仍然可以在提交中选择你想要的文件,并以这种方式对不同的文件进行多次提交。在Sourcetree中,所有文件都将被提交。) mixed:在提交之前,您必须将单独的文件再次添加到索引中(在Sourcetree中,所有更改的文件都将被取消staging)

要真正丢失您在代码中的更改:

难的是:你不仅重写了历史,而且还失去了你重置之前的所有更改

其他回答

在研究这三个选项之前,我们必须了解三件事。

1) 历史/头部

2)阶段/索引

3)工作目录

reset——soft:历史记录已更改,HEAD已更改,工作目录未更改。

reset——mixed:历史记录已更改,HEAD已更改,工作目录已更改。

reset——hard:历史记录更改,HEAD更改,工作目录更改,数据丢失。

使用Git总是安全的——软的。在复杂的需求中应该使用其他选项。

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

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

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

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

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

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

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

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

你不必强迫自己记住它们之间的区别。想想你是如何做出承诺的。

做一些改变。 Git添加。 git commit -m“我做了某事”

软,混合和硬是一种让你放弃从3到1的操作的方法。

柔软的“假装”从未见过你有没有犯过错。 混“假装”从来没见过你有没有git加。 硬“假装”从来没有看到你做了文件更改。

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

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