Git 入門系列(二)- 修改管理 / 撤銷操作 / 命令及區(qū)間關(guān)系

在上一篇中内列,介紹了 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) checkoutrm 都不起作用

我們再新建一個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)系.jpg

能夠熟練掌握 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)注個人公眾號铡羡,【程序媛春哥的手記】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市意鲸,隨后出現(xiàn)的幾起案子烦周,更是在濱河造成了極大的恐慌,老刑警劉巖临扮,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件论矾,死亡現(xiàn)場離奇詭異,居然都是意外死亡杆勇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門饱亿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚜退,“玉大人闰靴,你說我怎么就攤上這事∽曜ⅲ” “怎么了蚂且?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幅恋。 經(jīng)常有香客問我杏死,道長,這世上最難降的妖魔是什么捆交? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任淑翼,我火速辦了婚禮,結(jié)果婚禮上品追,老公的妹妹穿的比我還像新娘玄括。我一直安慰自己,他們只是感情好肉瓦,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布遭京。 她就那樣靜靜地躺著,像睡著了一般泞莉。 火紅的嫁衣襯著肌膚如雪哪雕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天鲫趁,我揣著相機與錄音斯嚎,去河邊找鬼。 笑死饮寞,一個胖子當(dāng)著我的面吹牛孝扛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幽崩,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼苦始,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慌申?” 一聲冷哼從身側(cè)響起陌选,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹄溉,沒想到半個月后咨油,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柒爵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年役电,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棉胀。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡法瑟,死狀恐怖冀膝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霎挟,我是刑警寧澤窝剖,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站酥夭,受9級特大地震影響赐纱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熬北,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一疙描、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒜埋,春花似錦淫痰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烈评,卻和暖如春火俄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讲冠。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工瓜客, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竿开。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓谱仪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親否彩。 傳聞我的和親對象是個殘疾皇子疯攒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • By 耿素花 我盼望著下雪,就像盼望一個盛大的日列荔。 終于下雪了敬尺。悄悄拉開窗簾,雪花在窗外肆意飄舞著贴浙,就像飄舞著一段...
    白小塵閱讀 160評論 0 0
  • 我有一個特點就是特別喜歡活在自己的圈子里砂吞,對于圈子外的人不是說不屑一顧,只不過覺得很難融入崎溃,所以我從來不主動走入別...
    00_jianshu閱讀 446評論 0 0
  • 一篇日記喚醒了多少家長對家庭教育的認知蜻直。一場家庭教育盛會引起了多少人關(guān)注!就在今天第二屆家長論壇暨第三屆家校合育聯(lián)...
    阿濤演藝閱讀 526評論 0 15
  • 今晚回家早,所以回家的時候兒子還在寫作業(yè)袭蝗。小外甥則在一邊玩唤殴,問他作業(yè)寫完了嗎般婆?小家伙回答的挺痛快到腥,說寫完了,我也就...
    風(fēng)中的玫瑰花閱讀 200評論 0 2