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

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

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

本篇来解决这个问题 ↓↓

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

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

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



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

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

git checkout -- <file> 就是我们要使用的

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


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

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

移除暂存区(针对add)

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

这时候有两种方法

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

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


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

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

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

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


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

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

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

删除文件

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

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


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

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

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

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


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

git clean 有些常见参数

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

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

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


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

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

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


同样,删除某一个文件夹 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文件夹



使用 添加 -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 区间和命令关系.jpg

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


系列文章传送门

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • By 耿素花 我盼望着下雪,就像盼望一个盛大的日。 终于下雪了。悄悄拉开窗帘,雪花在窗外肆意飘舞着,就像飘舞着一段...
    白小尘阅读 153评论 0 0
  • 我有一个特点就是特别喜欢活在自己的圈子里,对于圈子外的人不是说不屑一顾,只不过觉得很难融入,所以我从来不主动走入别...
    00_jianshu阅读 443评论 0 0
  • 一篇日记唤醒了多少家长对家庭教育的认知。一场家庭教育盛会引起了多少人关注!就在今天第二届家长论坛暨第三届家校合育联...
    阿涛演艺阅读 524评论 0 15
  • 今晚回家早,所以回家的时候儿子还在写作业。小外甥则在一边玩,问他作业写完了吗?小家伙回答的挺痛快,说写完了,我也就...
    风中的玫瑰花阅读 196评论 0 2