持续创作,加快生长!这是我参与「日新计划 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 也完成这一操作。
假如用 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),一般是创立新文件或文件夹,你会发现 checkout
和rm
都不起作用
咱们再新建一个test2.txt, 一同树立一个文件夹 new
这时候假如要删去,能够手动删去,或许运用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 (仅删去未监督文件,不包括目录)上面只删去了 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 作业区及其相关指令的联系,那么恭喜你,现已成功入门了!