撤銷暫存文件與任意切換文件版本-天天三分鐘玩轉Git (7)

分享後端開發和雲計算必備相關技術,道盡程序員小熊與老闆的愛恨情仇,同名公衆號:編程三分鐘 回覆【 資源 】能夠得到程序員必備技能圖譜、數百本熱門編程電子書籍。mysql

產品說這個功能咱們不要了。——編程三分鐘git

有時候咱們想把暫存區的文件取出來。程序員

1、暫存區到工做區

假如咱們剛剛執行了git reset --soft或者add等的操做,把一些東西加到了咱們的暫存區,好比日誌文件,咱們就要把他們從暫存區拿出來。sql

  • git status 查看暫存區,裏面有一個mysql.log被放進去了
  • git reset -- mysql.logmysql.log取出來
  • git status能夠看到真的取出來了 而後若是不要想這個文件的話再rm掉就好啦,可是若是這些文件每次自動生成都要用這種方式取出暫存區真的好累,咱們能夠用 git忽略不想提交的文件(後續技巧篇詳細描述)

2、回滾文件到某個提交

當咱們想要把某個文件任意的回滾到某次提交上,而不改變其餘文件的狀態咱們要怎麼作呢? 咱們有兩種狀況,一種是,只是想在工做區有修改的文件,直接丟棄掉他如今的修改;第二種是想把這個文件回滾到之前的某一次提交。咱們先來講第一種編程

1. 取消文件在工做區的修改

  • 更新time.txt的內容,能夠status看到他發生了變化
  • git checkout -- time.txt , 取消此次在工做區的修改,若是他已經被add加到了暫存區,那麼這個命令就沒有用了,他的意思是取消本次在工做區的修改,去上一次保存的地方。若是沒有add就回到和版本庫同樣的狀態;若是已經加到了暫存區,又作了修改,那麼就回加到暫存區後的狀態

2. 將文件回滾到任意的版本

咱們這裏說的把文件回滾到之前的某個版本的狀態,完整的含義是保持其餘文件的內容不變,改變這個文件到之前的某個版本,而後修改到本身滿意的樣子和作下一次的提交。後端

核心命令bash

git checkout [<options>] [<branch>] -- <file>...複製代碼

咱們仍是用time.txt這個文件來作試驗,先搞三個版本出來,在這裏我已經搞好了,來看看:雲計算

版本1,time.txt內容00:50spa

版本2,time.txt內容18:513d

版本3,time.txt內容10:41

如今的是版本1,咱們把版本3檢出試試。達到下圖的狀態

  • 使用checkout+commit id+-- filename的組合,橫跨版本2把歷史版本3的time.txt搞出來了
  • 查看狀態,time.txt被改變了

咱們來把time.txt恢復到版本1,一樣的方法,由於版本1是上一次提交咱們能夠省略掉版本號

看到了吧!只要用git checkout commit_id -- filename的組合,想搞出哪一個文件歷史版本就搞出哪一個。

到了這裏,你可能會很懵比,resetcheckout命令真的好像啊!均可以用來作撤消

  • checkout語義上是把什麼東西取出來,因此此命令用於從歷史提交(或者暫存區域)中拷貝文件到工做目錄,也可用於切換分支。
  • reset語義上是從新設置,因此此命令把當前分支指向另外一個位置,而且有選擇的變更工做目錄和索引。也用來在從歷史倉庫中複製文件到索引,而不動工做目錄。

小小小小結

取出暫存區的文件:git reset -- 文件名

取消此次在工做區的修改: git checkout -- 文件名

把文件回滾到之前的某個版本的狀態:git checkout+commit id+-- filename


還想不通能夠在下方留言哦!

明明我賺錢那麼難…爲何人家賺個人錢那麼容易


只要有一我的能得到幫助,小熊就會繼續努力

喜歡就讓咱們一塊兒玩耍吧

相關文章
相關標籤/搜索