63.Git Reset详细解释了版本回滚的三种模式。
它有三种模式,软,混合,硬,以及特定的用法。下图完整的展现出来了。
这三种模式都懂,对使用这个命令很有帮助。在理解这三种模式之前,你需要了解一点Git的基本流程。如上所示,Git将有三个区域:
工作树的当前工作区域
索引/阶段临时区域不同于git stash命令临时区域。使用git add xx,可以将xx添加到近阶段。
存储库提交的历史,即使用git commit提交后的结果。
首先Git必须知道当前版本是哪个版本。在Git中,Head用来表示当前版本,前一个版本是Head,前一个版本是HEAD,以此类推。当然从100版本写100更容易,所以写成HEAD~100。
- hard将在重置头和分支的同时重置缓存和工作目录的内容。当您在重置后添加- hard参数时,您的缓存和工作目录的内容将完全重置为与HEAD的新位置相同的内容。换句话说,您未提交的更改将被完全删除。
回滚到以前的版本:
回到指定版本号的版本(以1a2b3c为例):
Reset - hard:重置stage区域和工作目录;
- soft将保留工作目录的内容,并将重新设置头带来的新文件差异放入临时存储区。
「重置头部带来的新不同」是什么?就是这个:
由于磁头已经从4移到了3,而工作目录和临时存储区的内容在复位过程中并没有被清除,所以4中的变化成为了复位后工作目录和磁头的新区别。这就是上一段提到的“重置头部造成的差异”。
这就是-soft和-hard的区别:-hard会清除工作目录和临时存储区的变化,*而-soft会保留工作目录的内容,把保留工作目录内容带来的新的文件差异放到临时存储区。
如果git reset不添加参数,则默认使用- mixed参数。此时,它的意思是:保留工作目录,清空临时存储区。换句话说,工作目录的修改、临时存储区的内容以及重置导致的新文件差异都将被放入工作目录。简而言之,它意味着“混合了工作目录中的所有差异”。
首先Git必须知道当前版本是哪个版本。在Git中,Head用来表示当前版本,前一个版本是Head,前一个版本是HEAD,以此类推。当然从100版本写100更容易,所以写成HEAD~100。
回滚到以前的版本:
回到指定版本号的版本(以1a2b3c为例):
- hard将清除工作目录和临时存储区中的更改。
- soft将保留工作目录的内容,并将保留工作目录的内容带来的新文件差异放入临时存储区。
-混合参数。如果git reset不添加参数,则默认使用- mixed参数。此时,它的意思是:保留工作目录,清空临时存储区。
HEAD指向的版本就是当前版本,所以Git允许我们在版本之间穿梭,使用命令。
git重置-硬提交id
在穿梭之前,可以使用git log来查看提交历史,以便确定要恢复到哪个版本。
要返回到将来,请使用git reflog检查命令历史,以确定将来要返回到哪个版本。