无废话Git——本地服务器提交撤销

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oscar999/article/details/81698011

无废话Git——概念与本地服务器提交

上一篇有提到, add 到暂存区的改动可以撤销,同样已经Commit的改动同样有可能有要撤销回退的状况。

暂存区回退

命令行:
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使用的都是这种模式。

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

D:\gitworkspace\project1>git log –graph –oneline
* c51c220 third commit
* 7e6fea3 second commit
* 6661de3 file1 add

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

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

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

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

D:\gitworkspace\project1>git log –graph –oneline
* db34463 four commit
* 7e6fea3 second commit
* 6661de3 file1 add

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

soft 模式

  1. 准备工作
    在file1.txt 新增一行: five line

  2. git add 到暂存区

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

    • 暂存区的内容还在(不同与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
  5. 提交更改
    git commit -m “five commit”

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

hard 模式

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

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

  3. 执行效果

    • 缓存区内容没有了(与mixed同)
    • 工作区的内容也被回退的版本替换了。
      也就是说, 使用库的指定版本完全替换。

总结

git reset –soft : 不改变暂存区, 仅仅将Commit回退
git reset –mixed : 不改变工作区,覆盖暂存区
git reset –hard : 改变工作区,覆盖暂存区

猜你喜欢

转载自blog.csdn.net/oscar999/article/details/81698011
今日推荐