Git系列教程(三):管理修改、撤銷修改 git checkout git reset

2020-09-03 禿頭程式設計師兒

Git系列教程(一):簡介、安裝、配置我們學習了分布式和版本控制系統的概念、Git具有的8個功能以及如何在Windows上安裝Git、進行相關配置並創建版本庫。

Git系列教程(二):版本庫中添加文件、版本回退我們一起學習了如何在版本庫中添加文件的兩個步驟以及如何查看歷史命令、在版本修改多次增刪改之後如何進行版本回溯的git命令。

Git管理修改

Git相比於其他版本控制系統SVN的優勢在於Git跟蹤並管理的是修改,而非文件。那什麼是修改呢?新增一行,稱為一個修改,刪除一行,稱為一個修改,更改字符,稱為一個修改,刪除一些又添加一些,也稱為一個修改,甚至創建一個新文件,也稱為一個修改。值得注意的是每次修改,如果不用git add到暫存區,那就不會加入到commit中。

Git撤銷修改

當我們在readme.txt中添加了一行:I hope to leave work early.調皮完之後刪掉最後一行,手動把文件恢復到上一個版本。用git status查看一下:

Git提示我們用git checkout -- file可以丟棄工作區的修改:

$ git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裡有兩種情況:

一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次git commit或git add時的狀態。我們再看看readme.txt的文件內容,內容已經被還原了。

checkout命令用法如下:

1. git checkout [-q] [<commit>] [--] <paths> ...

2. git checkout [<branch>]

3. git checkout [-m] [ [-b | -- orphan ] <new_branch>] [start_point]

用法2比用法1的區別在於,用法1包含了路徑。為了避免路徑和引用(或提交ID)同名而發生衝突,可以在<paths>前用兩個連續的連字符作為分隔。用法1的<commit>是可選項,如果省略,則相當於從暫存區進行檢出。

git checkout -- file命令中的--很重要,沒有--,就變成了「切換到另一個分支」的命令,我們在後面的分支管理中會再次遇到git checkout命令。

上面介紹的是第一種情況,第二種情況便是我們修改了txt文件,加了一行I hope to leave work early.並且使用git add命令添加到了暫存區,值得挽救的是在commit之前,你發現了這個問題。用git status查看一下,修改只是添加到了暫存區,還沒有提交:

Git同樣提示我們,用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區。再用git status查看一下,現在暫存區是乾淨的,工作區有修改。然後進行丟棄工作區的修改,$git checkout-- readme.txt

HEAD 可以理解為一個遊標 一直指向當前我們所在版本庫的地址 就是我們當前所在版本庫的頭指針

當然 我們也可以不使用HEAD 可以直接使用版本庫的地址 版本庫地址 可以用 git log 命令列印出來

小結

又到了小結時間。

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

相關焦點

  • 前端面試題:git reset、git revert 和 git checkout 有什麼區別
    三個區的轉換關係以及轉換所使的命令如下圖git reset、git revert 和 git checkout的共同點:來撤銷代碼倉庫中的某些更改。git reset 還持三種標記,來標記 reset 指令影響的範圍: --mixed:會影響到暫存區和歷史記錄區。
  • git 基本操作教程
    本文是學習廖雪峰git教程時的一些筆記,大家想看詳細版請閱讀廖雪峰git教程2.本文中使用到的系統版本為windows10一.empty Git repository in /Users/michael/gitlearn/.git/三.
  • Git學步
    我們需要撤銷修改,回到最後一次add狀態,直接丟棄工作區的修改git checkout -- testgitaddfile.txt沒有--,就變成了"切換到另一個分支"的命令,撤銷工作區修改注意加上--
  • Git版本控制常用命令
    Git簡介Git是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。
  • 值得精通地Git撤銷方法
    可以通過git statu命令查看文件狀態:在該狀態下,你有三種方法選擇撤銷這個更改:放棄所有本地更改,但保存它們以便以後重複使用git stash 。撤銷本地變化(永久丟棄)git checkout --。永久丟棄對所有文件的所有本地更改 git reset --hard 。
  • 詳細介紹下git中的多種撤銷
    之後,就可以利用 git返回到項目的一個早期版本。下面我們說一些常見的撤銷常見場景,以及 git的命令操作步驟。撤銷一個「已公開」的改變場景: 你在本地倉庫已經執行了 git push命令, 把修改記錄發送到了遠程伺服器(GitHub或者gitee),現在發現了其中一個commit有問題,需要撤銷。
  • git總結
    三、文件在三個區塊的轉換當對工作區修改(或新增)的文件執行 git add 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。
  • git 快速入門及常見用法
    二、git提交後撤銷問題撤銷得分三種情況:第一,已經修改文件但未執行git add的撤銷方法;我故意在.gitignore文件修改之後且沒有git add,直接通過git checkout -- <file
  • git常用命令整理
    將所有修改的文件添加到Stage區git commit -m "comment"把暫存區所有修改提交到分支git diff <name> 查看文件的修改git log --pretty=online 查看當前提交的日誌git reset --hard HEAD^ 回退到上一個版本git reset
  • 一起學習分布式管理工具git
    當執行 git rm --cached <file> 命令時,會直接從暫存區刪除文件,工作區則不做出改變當執行 git checkout . 或者 git checkout -- <file> 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。當執行 git checkout HEAD .
  • git的幾個常用基本操作
    當然,如果work dir中被修改的文件很多,可以使用通配符全部恢復成stage:$ git checkout .有一點需要指出的是,checkout命令只會把被「修改」的文件恢復成stage的狀態,如果work dir中新增了新文件,你使用git checkout .是不會刪除新文件的。
  • 最全 Git 操作指令
    現如今的開發流程中,Git已經成為我們無所不在的好朋友,大量的代碼託管在第三方代碼管理平臺,所以熟練地使用Git也成為程式設計師的基本功。撤銷更改僅在本地更改代碼,未add或commit代碼git reset --hard 或者git checkout .
  • 7000+字帶你全面搞懂 Git 命令+原理
    那麼,集中化的版本控制系統又是什麼呢,說白了,就是有一個集中管理的中央伺服器,保存著所有文件的修改歷史版本,而協同開發者通過客戶端連接到這臺伺服器,從伺服器上同步更新或上傳自己的修改。比如我們想將某個修改後的文件撤銷到上一個版本,或者想撤銷某次多餘的提交,都要用到git的撤銷和回退操作。
  • git常用命令總結
    /git/index/;本地版本庫:管理代碼的,所在目錄為./git/objects以下是三個工作區的關係圖三個工作區的關係圖的管理當中,需要用git add file_name把它納入管理被追蹤(tracked):指該文件已經在git的管理中二、git常用命令2.1.初始化配置可以cd到一個目錄下,初始化git項目 git add file_name 修改工作目錄和暫存區的文件名稱
  • 30分鐘吃掉Git和GitHub常用操作
    Git的功能:版本控制(版本管理,遠程倉庫,分支協作)人工版本管理:Git版本管理:Git功能原理git版本控制系統由工作區,緩存區,版本庫組成。git跟蹤的是文件的修改而不是全部文件。git擅長管理代碼等文本文件,不擅長管理圖片等二進位文件。
  • git簡單介紹
    git是目前世界上最先進的分布式版本控制系統。Git 如此的優秀是因為,Git 跟蹤並管理的不是文件,而是修改。需要填寫用戶名和郵箱作為一個標識。從伺服器更新代碼:git pull進入某文件夾中,並把該文件夾作為Git可以管理的倉庫 :git init 把本地分支推送到遠程 :git push origin master查看遠程庫的信息:git remote查看遠程庫的詳細信息:git remote -v
  • Git 放棄本地修改,強制拉取更新
    開發時,對於本地的項目中修改不做保存操作(或代碼改崩),可以用到Git pull的強制覆蓋,具體代碼如下:git fetch --allgit reset --hard origin/mastergit pull //可以省略
  • 沒想到,Git居然有3種「後悔藥」
    git revert是用於「反做」某一個版本,以達到撤銷該版本的修改的目的。比如,我們commit了三個版本(版本一、版本二、 版本三),突然發現版本二不行(如:有bug),想要撤銷版本二,但又不想影響撤銷版本三的提交,就可以用 git revert 命令來反做版本二,生成新的版本四,這個版本四裡會保留版本三的東西,但撤銷了版本二的東西;在revert命令中常用的就兩個:git revert
  • git基本操作與規範流程
    git是個非常好用的版本工具,不但可以在linux下環境使用,還可以在windows下使用。我們的整個代碼工程需要使用這個來管理,我們自己的一些聯繫也可以很方便的使用它去管理,節省了很多代碼維護的成本。
  • 分布式版本控制Git之本地倉庫管理
    "輸入你的用戶名"$ git config --system --replace-all user.email "輸入你的郵箱"$ git config --system --replace-all user.name "輸入你的用戶名"三、本地倉庫管理1、創建本地版本倉庫mkdir 目錄名 #創建文件夾cd 目錄名 #進入目錄git