暂存区回退
Git reset
mixed 模式, 默认模式
soft 模式
hard 模式
总结
暂存区回退
命令行:
git reset HEAD – filename

Git GUI 界面操作

  1. 选中需要unstage的文件
  2. 菜单 Commit–>Unstage From Commit

以上一篇的project 1的 file1.txt文件为例,

  1. 改动文件: 新增一行:second Line
  2. 添加到暂存区
  3. 回退: git reset HEAD – file1.txt

从暂存区撤回,之前文件做过的修改还会保持。

Git reset
以上只是Git 撤销的一种用法, Git Rest有三种模式:
mixed - 默认
soft
hard

mixed 模式, 默认模式
git reset 如果不加其他参数或是加上 mixed使用的都是这种模式。

准备工作
将project1的file1文件提交三次, 使用:
git log –graph –one
命令查看一下提交记录 (单行,图形化显示)
D:\\gitworkspace\\project1>git log –graph –oneline

  • c51c220 third commit
  • 7e6fea3 second commit
  • 6661de3 file1 add

修改文件,添加一行: four Line
并add 到暂存区。

现在要回退到第二次提交
git reset –mixed 7e6fea3
这里的版本号也可以使用 HEAD^替代。(不过笔者的使用好像是有点问题)
HEAD指向当前版, HEAD^ 上一版, HEAD^^上上一版…
使用git show HEAD , HEAD已经指向第二次提交了。

执行完成之后,变化如下:

暂存区的内容撤销了
工作区的文件没有变化, 也就是添加的那一行还在
使用git log 查看, 只有两条提交的记录了。
使用git diff 比较差异,版本库是使用第二版和本地文件进行比较。
删除第三行后, add后提交。再看一下log

D:\\gitworkspace\\project1>git log –graph –oneline

  • db34463 four commit
  • 7e6fea3 second commit
  • 6661de3 file1 add

第三次的提交就从版本库中去掉了。

soft 模式
准备工作
在file1.txt 新增一行: five line

git add 到暂存区

执行: git reset –soft 7e6fea3
也就是回退一个版本。
执行完成之后:

暂存区的内容还在(不同与mixed 模式)
使用git diff –cached 比较一下暂存区与版本库的差别。
版本库使用的是回退的版本(与mixed相同)
D:\\gitworkspace\\project1>git diff –cached
diff –git a/file1.txt b/file1.txt
index 68d1742…80554e6 100644
— a/file1.txt
+++ b/file1.txt
@@ -1,2 +1,4 @@
first Line
-second Line
\\ No newline at end of file
+second Line
+four line
+five line
\\ No newline at end of file
提交更改
git commit -m “five commit”

6.看一下记录, 库中上一版的记录没有了。
git log –graph –oneline

hard 模式
准备工作
修改file1.txt , 新增 six Line, 并add到暂存区

回退上一版,执行
git reset –hard 706fea3

执行效果

缓存区内容没有了(与mixed同)
工作区的内容也被回退的版本替换了。
也就是说, 使用库的指定版本完全替换。
总结
git reset –soft : 不改变暂存区, 仅仅将Commit回退
git reset –mixed : 不改变工作区,覆盖暂存区
git reset –hard : 改变工作区,覆盖暂存区

作者:oscar999
来源:CSDN
原文:https://blog.csdn.net/oscar999/article/details/81698011
版权声明:本文为博主原创文章,转载请附上博文链接!

收藏 打印