我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
当前回答
git reset命令各选项的基本区别如下。
——soft:只重置HEAD到你选择的提交。工作原理与git签出基本相同,但不创建分离的头部状态。 ——mixed(默认选项):将HEAD重置为您在历史记录中选择的提交,并撤消索引中的更改。 ——hard:将HEAD重置为您在历史记录中选择的提交,撤消索引中的更改,并撤消工作目录中的更改。
其他回答
莫·阿里用最简单的方式解释了这一点,下面是另一个简单的解释:
——soft:重置HEAD指针指向上一次提交
——mixed:——soft + delete添加的更改
——hard:——混合+恢复工作树文件的变化(小心!)
所有类型的重置都会改变回购中的HEAD。此外…… >将从repo中删除的提交的更改移动到索引中,并合并已经存在的任何更改。 Git reset——hard <b>丢失工作树和索引中的更改。 它是唯一更改工作树的方法。
在这些情况下,我喜欢能够解释这一点的视觉效果:
Git重置-[硬/混合/软]:
所以每一个都影响不同的范围:
Hard =>工作目录+索引+ HEAD 混合=>指数+头部 软=>头只(索引和工作目录不变)。
-混合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命令来丢弃远程提交。
——soft:告诉Git将HEAD重置为另一个提交,这样索引和工作目录将不会以任何方式改变。在原始HEAD和提交之间更改的所有文件都将被暂存。
-mixed:就像软的,这将重置HEAD到另一个提交。它还将重置索引以匹配它,而工作目录将不会被触及。所有更改都将保留在工作目录中,并显示为已修改,但不是阶段性的。
——hard:这将重置所有内容——它将HEAD重置回另一个提交,重置索引以匹配它,并重置工作目录以匹配它。
-混合和-软之间的主要区别是你的索引是否也被修改。点击这里查看更多信息。