在上一篇中内列,介紹了 Git 、Git 的安裝以及基本使用
用 git add
將修改的文件添加到 暫存區(qū)泼疑,用 git commit
將暫存區(qū)的內(nèi)容提交到 Git 管理德绿,使用 git push
將本地內(nèi)容同步到遠端倉庫中荷荤。使用 git status
來查看當(dāng)前文件狀態(tài),git log
來看提交記錄移稳,git diff
用來查看修改內(nèi)容蕴纳。
如果已經(jīng) add 了,怎么取消呢个粱?
已經(jīng) commit 了古毛,該如何撤回呢?
本篇來解決這個問題 ↓↓
丟棄工作區(qū)修改(取消修改內(nèi)容)
首先先說明下修改的概念都许,修改是什么稻薇?
比如添加了一行,修改了一行胶征,或者刪除一樣都是修改塞椎,加個換行符一個空格也都是修改,創(chuàng)建一個新文件睛低,或刪除一個文件都是修改案狠。
假設(shè)小王在 test 文檔中不小心撒了歡兒,打出了lalala钱雷,如果發(fā)現(xiàn)了可以手動恢復(fù)到上一個狀態(tài)骂铁。
當(dāng)然通過 Git 也完成這一操作。
如果用 status 看一下罩抗,Git 會提示有兩種操作
- 使用
git add
添加 - 使用
git checkout -- <file>
丟棄工作區(qū)修改
git checkout -- <file>
就是我們要使用的
再來看下 test.txt, 已經(jīng)恢復(fù)了改動之前的內(nèi)容
git checkout
用來丟棄工作區(qū)修改拉庵,回退到上一次commit
-
git checkout -- <file>
舍棄某個文件的改動,注意一定要有“--” checkout 還可以對分支進行操作套蒂,后續(xù)再了解 -
git checkout .
注意有“.” 舍棄工作區(qū)當(dāng)前全部改動
移除暫存區(qū)(針對add)
小王改了 test 文件钞支,打算提交了,就用 add 放在了暫存區(qū)泣懊,然后發(fā)現(xiàn) test 還有要修改的地方伸辟,怎么辦?
這時候有兩種方法
- 如果想繼續(xù)修改再提交馍刮,那么繼續(xù)修改再 add 就可以
- 如果是多個文件,有其中一兩個文件窃蹋,或者全部文件都不想提交了卡啰,就需要把暫存區(qū)的文件撤回到工作區(qū)
目的就是使得 暫存區(qū)的文件都是可以提交的內(nèi)容,如果不需要就要移出暫存區(qū)
上面我們修改了 test 文件警没,還沒有添加到暫存區(qū)匈辱,如果添加到暫存區(qū)的文件怎么撤回呢?
修改下文件杀迹,并 add
Git 會提示使用
git reset HEAD <file>
將 stage 狀態(tài)改為 unstage亡脸,也就是移出暫存區(qū)到工作區(qū)
可以看到此時并不會丟棄修改的內(nèi)容,而是將暫存區(qū)的文件撤回到工作區(qū),這就是 git reset HEAD <file>
的用法浅碾,reset 也可以像 add 和 checkout 一樣有全部操作大州,git reset .
即可
舉個例子,現(xiàn)在有多個文件修改了垂谢,有部分文件需要提交厦画,但是add . 全都提交了,就可以使用 reset 將待提交的文件撤回到工作區(qū)滥朱。
撤銷上一次提交(針對commit)
先看一組操作根暑,修改 test 內(nèi)容,并進行一次提交 徙邻,說明一下 commit123
現(xiàn)在修改的文件被提交了并且 commit 了排嫌,現(xiàn)在發(fā)現(xiàn)提交的有問題,不想提交了缰犁,怎么辦躏率?
git reset --soft HEAD^
不刪除工作區(qū)的改動,撤銷commit民鼓,將內(nèi)容存放在暫存區(qū)(add 之后)薇芝,HEAD^ 或 HEAD~1 表示上一次 commit(HEAD~2就是上上次commit), 也可以接commitid丰嘉,如 git reset --soft 8f1fe9
夯到,撤銷commit 到 「github commit」 那一次提交,之后修改的內(nèi)容都在暫存區(qū)
reset 命令的其他參數(shù)及比較
git reset -- soft
撤銷commit饮亏,保留修改內(nèi)容到暫存區(qū)(index)
git reset --mixed
撤銷commit耍贾,保留修改內(nèi)容到工作區(qū)(working dir)
git reset --hard
撤銷commit,直接丟棄修改路幸,回退到指定的 commit荐开,也可以理解成,強制回退到某一版本
刪除文件
在 Git 中简肴,刪除也是一個修改操作晃听,如果需要刪除操作方式和前面所說的修改是一致的
我們先新建一個文件 test2.txt,并提交
現(xiàn)在要刪除 test2 文件
可以直接刪除砰识, 也可以用命令 git rm <file>
進行刪除
確認刪除也就是 delete之后提交能扒,那么這個文件就被刪除,且改動記錄在版本庫中了
如果一個文件已經(jīng)被提交到版本庫辫狼,那么你永遠不用擔(dān)心誤刪
上面是一個已經(jīng)添加到版本庫的文件刪除初斑,如果是一個未監(jiān)視的文件(untracked file),一般是創(chuàng)建新文件或文件夾膨处,你會發(fā)現(xiàn) checkout
和rm
都不起作用
我們再新建一個test2.txt见秤, 同時建立一個文件夾 new
這時候如果要刪除砂竖,可以手動刪除,或者使用git clean
鹃答,上面的圖中可以看出乎澄,status 查看,文件是可以顯示出來的挣跋,但是新建的目錄并沒有顯示
git clean 有些常見參數(shù)
git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>
- -d三圆,移除未監(jiān)視目錄和文件
- -f(--force),表示強制刪除
- -n (--dry-run)避咆,只顯示將要做什么
詳情可參考 https://git-scm.com/docs/git-clean
參數(shù)比較多舟肉,但是常用主要有下面幾個
-
git clean -f
刪除 untracked files (僅刪除未監(jiān)視文件,不包含目錄)
上面只刪除了 test2查库,如果要刪除某一個文件git clean -f <file>
git clean -fd
會刪除 untracked 的文件和目錄
又新建了test2 文件路媚,使用 -fd 會將未監(jiān)視的目錄也刪掉
同樣,刪除某一個文件夾
git clean -fd <dir>
-
git clean -xfd
連 gitignore 的 untracked 文件/目錄也一起刪掉 (慎用樊销,一般這個是用來刪掉編譯出來的 .o之類的文件用的)
直接刪除可能會有風(fēng)險整慎,可能刪除我們不想刪掉的內(nèi)容,所以在用上述 git clean 前围苫,建議加上 -n 參數(shù)來先看看會刪掉哪些文件裤园,防止重要文件被誤刪
git clean -nf
(或 git clean -f -n
)
git clean -nfd
(或 git clean -fd -n
)
git clean -nxfd
(或 git clean -xfd -n
)
再新建 test2 和 new文件夾
使用 添加 -n 先查看,這樣可以避免誤刪操作
回顧總結(jié)
- 撤銷工作區(qū)修改剂府,使用
git checkout --<file>
或git checkout .
- 撤銷暫存區(qū)提交拧揽,使用
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 可以先查看將會刪除的內(nèi)容
如git clean -nf
(或git clean -f -n
)
結(jié)合上一篇內(nèi)容在 Git 管理中涉及到的命令以及區(qū)間關(guān)系
能夠熟練掌握 Git 工作區(qū)及其相關(guān)指令的關(guān)系淤袜,那么恭喜你,已經(jīng)成功入門了衰伯!
系列文章傳送門
Git 入門系列(一)- Git 概念/安裝/基本操作/遠程推送更新
Git 入門系列(二)- 修改管理 / 撤銷操作 / 命令及區(qū)間關(guān)系
Git 入門系列(三)- 分支(上)創(chuàng)建與切換 / 合并 / 查看 / 刪除
Git 入門系列(四)- 分支(下)合并解決沖突 / 遠程分支
Git 入門系列(五)- stash 貯藏
Git 入門系列(六)- 標(biāo)簽 tag
Git 入門系列(七)- 可視化 Git 管理工具
Git 入門系列(八) - FAQ
歡迎關(guān)注個人公眾號铡羡,【程序媛春哥的手記】