Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系

在上一篇中,介绍了 Git 、Git 的安装以及基本使用
git add 将修改的文件添加到 暂存区,用 git commit 将暂存区的内容提交到 Git 管理,使用 git push 将本地内容同步到远端仓库中。使用 git status 来查看当前文件状态,git log 来看提交记录,git diff 用来查看修改内容。

如果已经 add 了,怎么取消呢?
已经 commit 了,该如何撤回呢?

本篇来解决这个问题 ↓↓

丢弃工作区修改(取消修改内容)

首先先说明下修改的概念,修改是什么?
比如添加了一行,修改了一行,或者删除一样都是修改,加个换行符一个空格也都是修改,创建一个新文件,或删除一个文件都是修改。

假设小王在 test 文档中不小心撒了欢儿,打出了lalala,如果发现了可以手动恢复到上一个状态。
当然通过 Git 也完成这一操作。


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第1张图片

如果用 status 看一下,Git 会提示有两种操作

  • 使用 git add 添加
  • 使用git checkout -- 丢弃工作区修改

git checkout -- 就是我们要使用的

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第2张图片

再来看下 test.txt, 已经恢复了改动之前的内容


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第3张图片

git checkout用来丢弃工作区修改,回退到上一次commit

  • git checkout -- 舍弃某个文件的改动,注意一定要有“--” checkout 还可以对分支进行操作,后续再了解
  • git checkout .注意有“.” 舍弃工作区当前全部改动

移除暂存区(针对add)

小王改了 test 文件,打算提交了,就用 add 放在了暂存区,然后发现 test 还有要修改的地方,怎么办?

这时候有两种方法

  • 如果想继续修改再提交,那么继续修改再 add 就可以
  • 如果是多个文件,有其中一两个文件,或者全部文件都不想提交了,就需要把暂存区的文件撤回到工作区
    目的就是使得 暂存区的文件都是可以提交的内容,如果不需要就要移出暂存区

上面我们修改了 test 文件,还没有添加到暂存区,如果添加到暂存区的文件怎么撤回呢?
修改下文件,并 add

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第4张图片

Git 会提示使用 git reset HEAD 将 stage 状态改为 unstage,也就是移出暂存区到工作区

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第5张图片

可以看到此时并不会丢弃修改的内容,而是将暂存区的文件撤回到工作区,这就是 git reset HEAD 的用法,reset 也可以像 add 和 checkout 一样有全部操作,git reset . 即可
举个例子,现在有多个文件修改了,有部分文件需要提交,但是add . 全都提交了,就可以使用 reset 将待提交的文件撤回到工作区。

撤销上一次提交(针对commit)

先看一组操作,修改 test 内容,并进行一次提交 ,说明一下 commit123


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第6张图片

现在修改的文件被提交了并且 commit 了,现在发现提交的有问题,不想提交了,怎么办?

git reset --soft HEAD^不删除工作区的改动,撤销commit,将内容存放在暂存区(add 之后),HEAD^ 或 HEAD~1 表示上一次 commit(HEAD~2就是上上次commit), 也可以接commitid,如 git reset --soft 8f1fe9,撤销commit 到 「github commit」 那一次提交,之后修改的内容都在暂存区

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第7张图片

reset 命令的其他参数及比较
git reset -- soft撤销commit,保留修改内容到暂存区(index)
git reset --mixed撤销commit,保留修改内容到工作区(working dir)
git reset --hard 撤销commit,直接丢弃修改,回退到指定的 commit,也可以理解成,强制回退到某一版本

删除文件

在 Git 中,删除也是一个修改操作,如果需要删除操作方式和前面所说的修改是一致的

我们先新建一个文件 test2.txt,并提交


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第8张图片

现在要删除 test2 文件
可以直接删除, 也可以用命令 git rm 进行删除
确认删除也就是 delete之后提交,那么这个文件就被删除,且改动记录在版本库中了

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第9张图片

如果一个文件已经被提交到版本库,那么你永远不用担心误删

上面是一个已经添加到版本库的文件删除,如果是一个未监视的文件(untracked file),一般是创建新文件或文件夹,你会发现 checkoutrm 都不起作用

我们再新建一个test2.txt, 同时建立一个文件夹 new


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第10张图片

这时候如果要删除,可以手动删除,或者使用git clean ,上面的图中可以看出,status 查看,文件是可以显示出来的,但是新建的目录并没有显示

git clean 有些常见参数

git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x | -X] [--]

  • -d,移除未监视目录和文件
  • -f(--force),表示强制删除
  • -n (--dry-run),只显示将要做什么
    详情可参考 https://git-scm.com/docs/git-clean

参数比较多,但是常用主要有下面几个

  • git clean -f 删除 untracked files (仅删除未监视文件,不包含目录)

    Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第11张图片

    上面只删除了 test2,如果要删除某一个文件 git clean -f

  • git clean -fd 会删除 untracked 的文件和目录

又新建了test2 文件,使用 -fd 会将未监视的目录也删掉

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第12张图片

同样,删除某一个文件夹 git clean -fd

  • git clean -xfd 连 gitignore 的 untracked 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)

直接删除可能会有风险,可能删除我们不想删掉的内容,所以在用上述 git clean 前,建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nf(或 git clean -f -n
git clean -nfd(或 git clean -fd -n
git clean -nxfd(或 git clean -xfd -n

再新建 test2 和 new文件夹


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第13张图片

使用 添加 -n 先查看,这样可以避免误删操作

回顾总结

  • 撤销工作区修改,使用git checkout --git checkout .
  • 撤销暂存区提交,使用 git reset HEAD^git reset .
  • 撤销 commit,使用 git reset [--soft | --mixed | --hard] HEAD^git reset [--soft | --mixed | --hard] commitId, 默认为 mixed

删除已提交的文件 git rm

删除 untracked files 使用 git clean

  • git clean -f删除 untracked files
  • git clean -fd (或 git clean -f -d)删除 untracked files 和目录
  • git clean -xfd 连 gitignore 的 untracked 文件/目录也一起删掉(不常用)
    加 -n 可以先查看将会删除的内容
    git clean -nf(或git clean -f -n

结合上一篇内容在 Git 管理中涉及到的命令以及区间关系


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第14张图片
Git 区间和命令关系.jpg

能够熟练掌握 Git 工作区及其相关指令的关系,那么恭喜你,已经成功入门了!


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第15张图片

系列文章传送门

Git 入门系列(一)- Git 概念/安装/基本操作/远程推送更新
Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
Git 入门系列(三)- 分支(上)创建与切换 / 合并 / 查看 / 删除
Git 入门系列(四)- 分支(下)合并解决冲突 / 远程分支
Git 入门系列(五)- stash 贮藏
Git 入门系列(六)- 标签 tag
Git 入门系列(七)- 可视化 Git 管理工具
Git 入门系列(八) - FAQ

欢迎关注个人公众号,【程序媛春哥的手记】


Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系_第16张图片

你可能感兴趣的:(Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系)