git reset的回退参数hard、soft和mixed

git reset的回退参数hard、soft和mixed

想要git reset命令回退到项目的某个commit版本,而有hard、soft、mixed三个参数可供选择。下面先给结论:

摘自链接

reset三种模式区别和使用场景:
1、–hard: 会将项目文件目录及commit记录都回退到目标commit。适用于需要修改项目目录的情况,而另外两个配置的项目文件是不会修改的。

2、 –soft: 保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致。适用于需要将多个commit合并简化成一个commit的情况。

3、 –mixed(默认) 重置位置的同时,只保留Working Tree工作目录(项目文件)的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致。适用于移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。

原理:

  • Working Tree 当前的工作区域
  • Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
  • Repository 提交的历史,即使用git commit提交后的结果

git reset的回退参数hard、soft和mixed_第1张图片
文件存入Repository流程
git reset的回退参数hard、soft和mixed_第2张图片
文件存入Repository流程:
1、刚开始 working tree 、 index 与 repository(HEAD)里面的內容都是一致的
git reset的回退参数hard、soft和mixed_第3张图片
2、当git管理的文件夹里面的内容出现改变后,此時 working tree 的內容就会跟 index 及 repository(HEAD)的不一致,而Git知道是哪些文件(Tracked File)被改动过,直接将文件状态设置为 modified (Unstaged files)。
git reset的回退参数hard、soft和mixed_第4张图片
3、当我們执行 git add 后,会将这些改变的文件內容加入 index 中 (Staged files),所以此时working tree跟index的內容是一致的,但他们与repository(HEAD)內容不一致。
git reset的回退参数hard、soft和mixed_第5张图片
4、接着执行 git commit 後,將Git索引中所有改变的文件內容提交至 Repository 中,建立出新的 commit 节点(HEAD)后, working tree 、 index 與与repository(HEAD)区域的内容 又会保持一致。
git reset的回退参数hard、soft和mixed_第6张图片

你可能感兴趣的:(java语法)