git reset命令
hanpy

git reset 是一个非常强大的命令,用于撤销提交、回溯版本以及调整工作目录或暂存区的状态。它有几个选项,其中最常用的是 –soft, –mixed, 和 –hard。此外,还有 –keep 选项,不过它的使用场景较为特定。

常用的几个选项

  1. –soft (软重置)
    仅移动 HEAD 指针到指定的提交,但不会影响工作目录或暂存区中的任何内容。
    用法: git reset –soft
    场景: 当你需要把某个提交移出提交历史,但保留改动以便重新提交时使用。
  2. –mixed (混合重置, 默认行为)
    工作目录中的改动保持不变,这些改动可以再次被添加到暂存区。
    用法: git reset 或者 git reset –mixed
    场景: 如果你想取消最近的一次提交,但仍希望保留所做的改动。
  3. –hard (硬重置)
    移动 HEAD 指针到指定的提交,并使工作目录和暂存区与指定的提交一致。
    这意味着所有未提交的改动都将被抛弃。
    用法: git reset –hard
    场景: 当你需要将工作目录恢复到某个提交的状态,并且不介意丢失未提交的改动。
  4. –keep
    在遇到删除的工作目录条目时,保留空目录。
    通常在使用 –hard 选项时,如果工作目录中有被删除的目录,这些目录也会被删除。而 –keep 选项则保留这些空目录。
    用法: git reset –hard –keep
    场景: 当你想要保留目录结构,即使这些目录在目标提交中为空。

总结

–soft 保留了工作目录中的所有改动,只改变了提交历史的位置。
–hard 清除了工作目录中的所有未提交改动,并将工作目录恢复到指定提交的状态。
–mixed 清空暂存区,但保留工作目录中的改动。

特殊情况

在某些情况下,例如当没有新的文件被添加或现有文件被重命名时,git reset –soft 和 git reset –mixed 对工作目录的影响可能看起来是一样的,因为它们都不会改变工作目录中的文件。然而,在涉及到新文件的添加或文件重命名的情况下,两者的区别就会显现出来:–mixed 会将暂存区中的新文件或重命名操作撤销,而 –soft 则不会。