我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
当前回答
以下是对TortoiseGit用户的基本解释:
Git复位-软-混合不动你的文件。
Git重置-实际上很难改变你的文件来匹配你重置的提交。
在TortoiseGit中,索引的概念被GUI隐藏得很好。当你修改一个文件时,你不必运行git add来将更改添加到暂存区域/索引中。当简单地处理现有文件的修改而不改变文件名时,git reset -soft和-mixed是一样的!只有添加新文件或重命名文件时才会注意到不同之处。在这种情况下,如果你运行git reset——mixed,你将不得不从Not Versioned Files列表中重新添加你的文件。
其他回答
以下是对TortoiseGit用户的基本解释:
Git复位-软-混合不动你的文件。
Git重置-实际上很难改变你的文件来匹配你重置的提交。
在TortoiseGit中,索引的概念被GUI隐藏得很好。当你修改一个文件时,你不必运行git add来将更改添加到暂存区域/索引中。当简单地处理现有文件的修改而不改变文件名时,git reset -soft和-mixed是一样的!只有添加新文件或重命名文件时才会注意到不同之处。在这种情况下,如果你运行git reset——mixed,你将不得不从Not Versioned Files列表中重新添加你的文件。
简单回答这3个选项在什么情况下使用:
在代码中保留当前的更改,但要重写提交历史:
soft:你可以一次性提交所有内容,并使用新的描述创建一个新的提交(如果你使用tootise git或任何其他大多数gui,这是一个可以使用的,因为你仍然可以在提交中选择你想要的文件,并以这种方式对不同的文件进行多次提交。在Sourcetree中,所有文件都将被提交。) mixed:在提交之前,您必须将单独的文件再次添加到索引中(在Sourcetree中,所有更改的文件都将被取消staging)
要真正丢失您在代码中的更改:
难的是:你不仅重写了历史,而且还失去了你重置之前的所有更改
git reset命令各选项的基本区别如下。
——soft:只重置HEAD到你选择的提交。工作原理与git签出基本相同,但不创建分离的头部状态。 ——mixed(默认选项):将HEAD重置为您在历史记录中选择的提交,并撤消索引中的更改。 ——hard:将HEAD重置为您在历史记录中选择的提交,撤消索引中的更改,并撤消工作目录中的更改。
所有类型的重置都会改变回购中的HEAD。此外…… >将从repo中删除的提交的更改移动到索引中,并合并已经存在的任何更改。 Git reset——hard <b>丢失工作树和索引中的更改。 它是唯一更改工作树的方法。
用最简单的话来说:
——soft:取消提交更改,更改是阶段性的(index)。 ——mixed(默认):uncommit + unstage变更,变更留在工作树中。 ——难:uncommit + unstage + delete changes,什么都不剩。