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

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

持续创作,加快生长!这是我参与「日新计划 10 月更文挑战」的第25天,点击检查活动概况

系列传送门

  • Git 入门系列(一)- Git 概念/装置/根本操作/长途推送更新
  • Git 入门系列(二)- 修正管理 / 吊销操作 / 指令及区间联系
  • Git 入门系列(三)- 分支(上)创立与切换 / 兼并 / 检查 / 删去
  • Git 入门系列(四)- 分支(下)兼并解决冲突 / 长途分支
  • Git 入门系列(五)- stash 贮藏
  • Git 入门系列(六)- 标签 tag
  • Git 入门系列(七)- 可视化 Git 管理工具
  • Git 入门系列(八) – FAQ

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

假如现已 add 了,怎么取消呢?

现已 commit 了,该如何撤回呢?

本篇来解决这个问题 ↓↓

丢掉作业区修正(取消修正内容)

首先先说明下修正的概念,修正是什么? 比方添加了一行,修正了一行,或许删去相同都是修正,加个换行符一个空格也都是修正,创立一个新文件,或删去一个文件都是修正。

假设小王在 test 文档中不小心撒了欢儿,打出了lalala,假如发现了能够手动恢复到上一个状况。

当然通过 Git 也完成这一操作。

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
假如用 status 看一下,Git 会提示有两种操作

  • 运用 git add 添加
  • 运用git checkout -- <file>丢掉作业区修正

git checkout -- <file> 便是咱们要运用的

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

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

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

git checkout用来丢掉作业区修正,回退到上一次commit

  • git checkout -- <file>舍弃某个文件的改动,留意必定要有“–” checkout 还能够对分支进行操作,后续再了解
  • git checkout .留意有“.” 舍弃作业区当前悉数改动

移除暂存区(针对add)

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

这时候有两种办法

  • 假如想持续修正再提交,那么持续修正再 add 就能够
  • 假如是多个文件,有其中一两个文件,或许悉数文件都不想提交了,就需求把暂存区的文件撤回到作业区 意图便是使得 暂存区的文件都是能够提交的内容,假如不需求就要移出暂存区

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

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

Git 会提示运用 git reset HEAD <file> 将 stage 状况改为 unstage,也便是移出暂存区到作业区

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

能够看到此刻并不会丢掉修正的内容,而是将暂存区的文件撤回到作业区,这便是 git reset HEAD <file>的用法,reset 也能够像 add 和 checkout 相同有悉数操作,git reset . 即可

举个比如,现在有多个文件修正了,有部分文件需求提交,但是add . 全都提交了,就能够运用 reset 将待提交的文件撤回到作业区。

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

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

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

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

git reset --soft HEAD^不删去作业区的改动,吊销commit,将内容存放在暂存区(add 之后),HEAD^ 或 HEAD~ 1 表明上一次 commit(HEAD~2便是上上次commit), 也能够接commitid,如 git reset --soft 8f1fe9,吊销commit 到 「github commit」 那一次提交,之后修正的内容都在暂存区

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

reset 指令的其他参数及比较 git reset -- soft吊销commit,保存修正内容到暂存区(index) git reset --mixed吊销commit,保存修正内容到作业区(working dir) git reset --hard 吊销commit,直接丢掉修正,回退到指定的 commit,也能够理解成,强制回退到某一版别

删去文件

在 Git 中,删去也是一个修正操作,假如需求删去操作方法和前面所说的修正是一致的

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

Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
现在要删去 test2 文件

能够直接删去, 也能够用指令 git rm <file> 进行删去

确认删去也便是 delete之后提交,那么这个文件就被删去,且改动记录在版别库中了

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

假如一个文件现已被提交到版别库,那么你永久不必担心误删

上面是一个现已添加到版别库的文件删去,假如是一个未监督的文件(untracked file),一般是创立新文件或文件夹,你会发现 checkoutrm 都不起作用

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

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

这时候假如要删去,能够手动删去,或许运用git clean ,上面的图中能够看出,status 检查,文件是能够显示出来的,但是新建的目录并没有显示

git clean 有些常见参数

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>

  • -d,移除未监督目录和文件
  • -f(–force),表明强制删去
  • -n (–dry-run),只显示将要做什么 概况可参阅 git-scm.com/docs/git-cl…

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

  • git clean -f 删去 untracked files (仅删去未监督文件,不包括目录)

    Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
    上面只删去了 test2,假如要删去某一个文件 git clean -f <file>

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

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

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

    相同,删去某一个文件夹 git clean -fd <dir>

  • 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 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系
运用 添加 -n 先检查,这样能够避免误删操作

回顾总结

  • 吊销作业区修正,运用git checkout --<file>git checkout .

  • 吊销暂存区提交,运用 git reset HEAD^git reset .

  • 吊销 commit,运用 git reset [--soft | --mixed | --hard] HEAD^git reset [--soft | --mixed | --hard] commitId, 默以为 mixed

  • 删去已提交的文件 git rm <file>

  • 删去 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 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系

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