我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
当前回答
你不必强迫自己记住它们之间的区别。想想你是如何做出承诺的。
做一些改变。 Git添加。 git commit -m“我做了某事”
软,混合和硬是一种让你放弃从3到1的操作的方法。
柔软的“假装”从未见过你有没有犯过错。 混“假装”从来没见过你有没有git加。 硬“假装”从来没有看到你做了文件更改。
其他回答
简单回答这3个选项在什么情况下使用:
在代码中保留当前的更改,但要重写提交历史:
soft:你可以一次性提交所有内容,并使用新的描述创建一个新的提交(如果你使用tootise git或任何其他大多数gui,这是一个可以使用的,因为你仍然可以在提交中选择你想要的文件,并以这种方式对不同的文件进行多次提交。在Sourcetree中,所有文件都将被提交。) mixed:在提交之前,您必须将单独的文件再次添加到索引中(在Sourcetree中,所有更改的文件都将被取消staging)
要真正丢失您在代码中的更改:
难的是:你不仅重写了历史,而且还失去了你重置之前的所有更改
莫·阿里用最简单的方式解释了这一点,下面是另一个简单的解释:
——soft:重置HEAD指针指向上一次提交
——mixed:——soft + delete添加的更改
——hard:——混合+恢复工作树文件的变化(小心!)
所有类型的重置都会改变回购中的HEAD。此外…… >将从repo中删除的提交的更改移动到索引中,并合并已经存在的任何更改。 Git reset——hard <b>丢失工作树和索引中的更改。 它是唯一更改工作树的方法。
请注意,这是一个简化的解释,旨在作为寻求理解这个复杂功能的第一步。
对于那些想要在这些命令之后可视化他们的项目状态的视觉学习者来说,这可能是有帮助的:
给定:- A - B - C (master)
适用于开启彩色终端机的用户 (git配置——global color。ui汽车):
git重置-软A,你会看到B和C的东西在绿色(分期和准备提交)
git重置-混合A(或git重置A),你会看到B和C的东西在红色(未分期和准备分期(绿色),然后提交)
git重置-硬A,你将不再看到B和C的变化在任何地方(将好像他们从来没有存在过)
或者对于那些使用像“塔”或“SourceTree”这样的GUI程序的人
git重置——软A,你会看到B和C的东西在“阶段性文件”区域准备提交
git reset—混合A(或git reset A),你会看到B和C的东西在“unstaging files”区域准备移动到staging,然后提交
git重置-硬A,你将不再看到B和C的变化在任何地方(将好像他们从来没有存在过)
在研究这三个选项之前,我们必须了解三件事。
1) 历史/头部
2)阶段/索引
3)工作目录
reset——soft:历史记录已更改,HEAD已更改,工作目录未更改。
reset——mixed:历史记录已更改,HEAD已更改,工作目录已更改。
reset——hard:历史记录更改,HEAD更改,工作目录更改,数据丢失。
使用Git总是安全的——软的。在复杂的需求中应该使用其他选项。