我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
我想拆分一个提交,但不确定使用哪个重置选项。
我正在看这页用简单的英语说,“git重置”是做什么的?,但我意识到我并不真正理解git索引或暂存区是什么,因此解释没有帮助。
此外,在我看来,在这个答案中——混合和——软的用例是相同的(当您想修复和重新承诺时)。有人能再详细解释一下吗?我知道,混合可能是最好的选择,但我想知道原因。最后,硬呢?
谁能给我一个工作流程的例子,如何选择3个选项会发生?
当前回答
你不必强迫自己记住它们之间的区别。想想你是如何做出承诺的。
做一些改变。 Git添加。 git commit -m“我做了某事”
软,混合和硬是一种让你放弃从3到1的操作的方法。
柔软的“假装”从未见过你有没有犯过错。 混“假装”从来没见过你有没有git加。 硬“假装”从来没有看到你做了文件更改。
其他回答
在研究这三个选项之前,我们必须了解三件事。
1) 历史/头部
2)阶段/索引
3)工作目录
reset——soft:历史记录已更改,HEAD已更改,工作目录未更改。
reset——mixed:历史记录已更改,HEAD已更改,工作目录已更改。
reset——hard:历史记录更改,HEAD更改,工作目录更改,数据丢失。
使用Git总是安全的——软的。在复杂的需求中应该使用其他选项。
所有其他的答案都很棒,但我发现最好通过将文件分解为三类来理解它们:非阶段性、阶段性和提交:
——困难应该是容易理解的,它恢复了一切 ——mixed(默认): 非暂存文件:不要更改 暂存文件:移至非暂存文件 提交文件:移动到非暂存状态 ——软: 非暂存文件:不要更改 阶段性文件:不要更改 提交文件:移动到阶段性
总而言之:
-软选项将移动所有(除了非暂存文件)到暂存区 混合选项会把所有东西都移到非舞台区域
用最简单的话来说:
——soft:取消提交更改,更改是阶段性的(index)。 ——mixed(默认):uncommit + unstage变更,变更留在工作树中。 ——难:uncommit + unstage + delete changes,什么都不剩。
在这些情况下,我喜欢能够解释这一点的视觉效果:
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命令来丢弃远程提交。