Git管理修改、撤銷和刪除文件

備注:

本文參考于廖雪峰老師的博客Git教程。依照其博客進(jìn)行學(xué)習(xí)和記錄,感謝其無私分享,也歡迎各位查看原文。

知識點(diǎn)

  • Git跟蹤和管理的的是修改,而不是文件

  • git checkout -- file,會將文件撤銷到和git add時的狀態(tài)一樣,即git checkout -- file會將工作區(qū)的文件撤銷到與暫存區(qū)(stage)一致

  • git checkout -- file命令中,如果沒有--,就變成了“切換到另一個分支”的命令

  • git reset HEAD file既可以回退版本,也可以把添加到暫存區(qū)的修改回退到工作區(qū),HEAD表示最新版本

  • 刪除文件,git rm file,git commit -m"..."

管理修改

Git不同于其他版本控制系統(tǒng),Git跟蹤和管理的的是修改,而不是文件

新增一行、刪除一行、修改字符、刪除又增加內(nèi)容、創(chuàng)建新文件等,都是修改

Git通過提交放入暫存區(qū)的修改,用來管理修改,而不是管理原文件。

撤銷修改

在實(shí)際中,(雖然不常發(fā)生)總是會出現(xiàn)發(fā)生一些問題需要撤銷修改。

  • 比如:在文件中添加一行無意義的特殊字符
liu@liu-virtual-machine:~/gitTest$ cat readme.txt

`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file
$%^%&^*&&(**)(*)*&^*(*&&*&YTRYYIN

沒有git add添加到暫存區(qū)時的撤銷

  • 此時,查看git status如下:
liu@liu-virtual-machine:~/gitTest$ git status
位于分支 master
尚未暫存以備提交的變更:
  (使用 "git add <文件>..." 更新要提交的內(nèi)容)
  (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動)

    修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
  • Git提示,git checkout -- file可以丟棄工作區(qū)的改動
git checkout -- readme.txt

git checkout -- readme.txt會把readme.txt文件在工作區(qū)的修改全部撤銷。

git checkout -- file,會將文件撤銷到和git add時的狀態(tài)一樣,即git checkout -- file會將工作區(qū)的文件撤銷到與暫存區(qū)(stage)一致

git checkout -- file作用在暫存區(qū)(stage),當(dāng)git add添加到暫存區(qū)后,git status不在顯示git checkout -- file命令提示

可自行測試

  • 此時文件內(nèi)容就回到了原來狀態(tài)
$ cat readme.txt

`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file

git checkout -- file命令中,如果沒有--,就變成了“切換到另一個分支”的命令

git add添加到暫存區(qū)后的撤銷

當(dāng)我們git add后,發(fā)現(xiàn)需要撤銷,此時查看git status狀態(tài)

$ git status
位于分支 master
要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    修改:     readme.txt

Git提示,使用git reset HEAD file可以把添加到暫存區(qū)的修改撤銷(unstage

$ git reset HEAD readme.txt
重置后取消暫存的變更:
M   readme.txt
  • git reset 既可以回退版本,也可以把添加到暫存區(qū)的修改回退到工作區(qū),HEAD表示最新版本

  • 此時查看git status,暫存區(qū)沒有修改,是干凈的,工作區(qū)有修改。

$ git status
位于分支 master
尚未暫存以備提交的變更:
  (使用 "git add <文件>..." 更新要提交的內(nèi)容)
  (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動)

    修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
  • 現(xiàn)在可以使用git checkout -- readme.txt丟棄工作區(qū)的修改。然后查看,修改的文件已經(jīng)回到原來狀態(tài)
$ git checkout -- readme.txt
$ cat readme.txt

`this is a test that I learning and use git version control system
this is a beginning
i Add a new line information in the end of readme.txt file

撤銷成功

git commit提交后的撤銷

對于已經(jīng)commit提交到版本庫的撤銷,可以使用版本回退更改。

如果你提交了遠(yuǎn)程倉庫,則需要另行處理。

刪除文件

Git中,刪除也是一個修改操作.

首先新建一個test.txt文件,添加并提交到倉庫

  • 當(dāng)我們把目錄下的文件刪除后
$ rm test.txt
  • 此時,工作區(qū)和版本庫變得不一致
$ git status
位于分支 master
尚未暫存以備提交的變更:
  (使用 "git add/rm <文件>..." 更新要提交的內(nèi)容)
  (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動)

    刪除:     test.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

git status指出刪除了test.txt文件。

  • 現(xiàn)在有兩種操作:1、確定從版本庫中刪除文件,2、從暫存區(qū)把誤刪的文件恢復(fù)

確定從版本庫中刪除文件

  • 使用git rm刪除文件并git commit提交
$ git rm test.txt
rm 'test.txt'
$ git status
位于分支 master
要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    刪除:     test.txt

$ git commit -m"remove test.txt"
[master 6a0f133] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt
$ git status
位于分支 master
無文件要提交,干凈的工作區(qū)

從暫存區(qū)把誤刪的文件恢復(fù)

  • 使用git checkout -- file從暫存區(qū)恢復(fù)誤刪的文件(本質(zhì)還是丟棄工作區(qū)的改動)
$ git checkout -- test.txt

參考

Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容