0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在 Git 中恢復(fù)隱藏的修改記錄

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 14:09 ? 次閱讀

git stashgit stash pop 這樣的命令是用來擱置(藏匿)和恢復(fù)我們工作目錄中的變化的。在本教程中,我們將學(xué)習(xí)如何在 Git 中恢復(fù)隱藏的修改記錄。

在工作目錄中存儲更改

在我們的例子中,假設(shè)我們已經(jīng)克隆了一個 Git Repo ?,F(xiàn)在,讓我們對 README.md 文件做一些修改,只需在最后添加一行,并檢查我們工作目錄的狀態(tài)。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
    (use "git add < file >..." to update what will be committed)
    (use "git restore < file >..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

在這里,我們可以使用 git stash 命令來暫時擱置我們的修改。

$ git stash
Saved working directory and index state WIP on master: sdfkdsx Updated pom.xml

現(xiàn)在,如果再做一次 git status,我們會看到我們的工作目錄是干凈的。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

恢復(fù)存儲的變化并找到哈希值

讓我們來看看如何恢復(fù)隱藏的修改,并找到與隱藏的提交相關(guān)的哈希值。

將隱藏的修改恢復(fù)到工作目錄中

我們可以像這樣把隱藏的修改帶回到我們的工作目錄中。

$ git stash pop
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
    (use "git add < file >..." to update what will be committed)
    (use "git restore < file >..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs...

正如我們在最后一行看到的那樣,git stash pop 不僅恢復(fù)了被存儲的修改,而且還刪除了對其相關(guān)提交的引用。

當(dāng)終端打開時定位哈希值

如果我們的終端仍然是開放的,我們可以很容易地找到執(zhí)行 git stash pop 后產(chǎn)生的哈希值。在我們的例子中,顯示在最后一行的哈希值是59861637... 。

在終端關(guān)閉后恢復(fù)哈希值

即使我們已經(jīng)關(guān)閉了終端,我們?nèi)匀豢梢酝ㄟ^以下方式找到我們的哈希值。

$ git fsck --no-reflog
Checking object directories: 100% (256/256), done.
Checking objects: 100% (302901/302901), done.
commit 598616...

現(xiàn)在我們可以看到被丟棄的儲藏室的提交哈希值了。

恢復(fù)被丟棄的儲藏庫

通常情況下,一旦我們應(yīng)用了一個儲藏庫條目,我們就不需要它了。然而,在某些情況下,我們可能希望在丟棄一個儲藏庫條目之后再去找它。例如,如果使用 git reset -hard HEAD 會丟掉我們工作目錄中所有未提交的修改。在這種情況下,我們可能希望召回一些早期的藏匿修改,盡管它們被丟棄了。

使用哈希值來恢復(fù)儲藏的內(nèi)容

使用哈希值來處理懸空的提交,我們?nèi)匀挥锌赡芑謴?fù)這些變化。

$ git stash apply 59861637f...
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
    (use "git add < file >..." to update what will be committed)
    (use "git restore < file >..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

我們可以看到,我們的工作目錄已經(jīng)恢復(fù)了先前所隱藏的變化。

找到所有的哈希提交

如果我們沒有現(xiàn)成的哈希值,我們可以找到它。

git fsck --no-flog | awk '/commit/ {print $3}'

這里,我們把 -no-flog 選項和 awk 結(jié)合起來,只為我們過濾出哈希值。

總結(jié)

在這篇文章中,我們看到了git stash 是如何工作的,以及當(dāng)我們使用它時它是如何丟棄一個條目的。當(dāng)我們知道一個被丟棄的條目的哈希值時,我們?nèi)匀豢梢允褂盟?,以及如何找到提交的哈希?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4314

    瀏覽量

    85851
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1135

    瀏覽量

    29885
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    15765
收藏 人收藏

    評論

    相關(guān)推薦

    何在Linux設(shè)置Git

    在 Linux 設(shè)置 Git 十分簡單,但為了獲得完美的配置,我做了以下五件事。
    發(fā)表于 10-21 09:06 ?1189次閱讀

    如何使用SSH簽名Git提交記錄

    Git 支持使用 GPG 來簽名提交記錄。但 GPG 用起來很復(fù)雜,一直賴得搞。
    發(fā)表于 06-16 16:21 ?576次閱讀

    如何隱藏CAD圖紙的部分圖形對象?CAD局部隱藏

    ,如果想要查看隱藏的對象的話可以使用【恢復(fù)可見】命令恢復(fù)隱藏對象的顯示。以上就是小編給大家整理介紹的浩辰CAD建筑軟件CAD局部
    發(fā)表于 06-06 17:55

    CodeAurora GIT Repo無法使用,哪里可以修改git linux git?

    :ls1046afrwy.config” 但它不適用于以下錯誤。(GIT 克隆) 所以,我檢查了 GIT Repo“ 我認(rèn)為 REPO 是不可用的。 我在哪里可以找到可用的 Linux GIT Repo。我想在 Flex
    發(fā)表于 04-25 08:36

    何在Project Explorer隱藏文件夾?

    何在 MCUXpresso 的項目資源管理器隱藏項目子目錄?例如,我想隱藏我的[i]doc\\\\子目錄,這可能嗎?
    發(fā)表于 05-18 06:01

    Git如何克隆,修改,添加和刪除文件的詳細(xì)資料概述

    在 本系列的第一篇文章 開始使用 Git 時,我們創(chuàng)建了一個簡單的 Git 倉庫,并用我們的計算機(jī)連接到它,向其中添加一個文件。在本文中,我們將學(xué)習(xí)一些關(guān)于 Git 的其他內(nèi)容,即如何克隆(下載)、
    的頭像 發(fā)表于 06-10 09:06 ?4150次閱讀
    在<b class='flag-5'>Git</b><b class='flag-5'>中</b>如何克隆,<b class='flag-5'>修改</b>,添加和刪除文件的詳細(xì)資料概述

    何在Linux查看隱藏文件

    在windows可以查看隱藏的文件。在Linux也可以查看隱藏文件且非常容易。要查看隱藏文件運行`ls -a`命令即可。
    的頭像 發(fā)表于 01-04 17:31 ?1.6w次閱讀

    如何快速批量修改Git提交記錄的用戶信息

    使用該腳本,替換其中 [Your Old Email] [Your New Author Name] [Your New Email] 之后在 git 目錄執(zhí)行即可。
    的頭像 發(fā)表于 02-06 16:09 ?2027次閱讀

    Git是什么

    Git是一個免費的、開源的分布式版本控制系統(tǒng),可以用于記錄一個或者若干個文件內(nèi)容的變化,方便查閱或者修改。
    的頭像 發(fā)表于 02-10 11:23 ?900次閱讀
    <b class='flag-5'>Git</b>是什么

    Git的基本概念,及基本框架、工作流程

    版本庫/倉庫(Repository /r??pɑ?z?t??ri/ 倉庫)Git的管理倉庫,管理版本的數(shù)據(jù)庫,記錄文件/目錄狀態(tài)的地方,所有內(nèi)容的修改記錄(版本)都在這里。就是工作區(qū)目錄下的
    的頭像 發(fā)表于 06-08 16:09 ?2908次閱讀
    <b class='flag-5'>Git</b>的基本概念,及基本框架、工作流程

    git rebase和git merge的區(qū)別

    "origin"已經(jīng)有了 2 個提交,如圖。 現(xiàn)在我們在這個分支做一些修改,然后生成兩個提交(commit)。 ? $?vi?file.txt$?git?commit$?vi?otherfile.txt$?git?commit.
    的頭像 發(fā)表于 07-05 09:54 ?643次閱讀
    <b class='flag-5'>git</b> rebase和<b class='flag-5'>git</b> merge的區(qū)別

    Git是什么 Git介紹

    git 是什么? Git 誕生于 2005 年,是一款免費、開源、分布式版本控制系統(tǒng)。 直接記錄快照,而非差異比較 Git 和其它版本控制系統(tǒng)的主要差別在于
    的頭像 發(fā)表于 07-22 10:50 ?1793次閱讀
    <b class='flag-5'>Git</b>是什么 <b class='flag-5'>Git</b>介紹

    git如何記錄每次更新到倉庫

    記錄每次更新到倉庫 工作目錄下的每一個文件都不外乎這兩種狀態(tài):已跟蹤 或 未跟蹤。 已跟蹤包括:已提交(committed)、已修改(modified) 和 已暫存(staged) 檢查當(dāng)前文件狀態(tài)
    的頭像 發(fā)表于 07-22 11:11 ?541次閱讀
    <b class='flag-5'>git</b>如何<b class='flag-5'>記錄</b>每次更新到倉庫

    Git命令解決常見場景記錄

    本文主要歸納一下git的學(xué)習(xí)記錄,在開發(fā)期間發(fā)現(xiàn)了git在sourcetree的處理不是很好,對于多選文件的丟棄這點不是很方便,所以做一個記錄,由于項目中有新建的文件,所以被識別為未跟
    的頭像 發(fā)表于 12-20 09:44 ?497次閱讀
    用<b class='flag-5'>Git</b>命令解決常見場景<b class='flag-5'>記錄</b>

    克服PLC編程的難題—基于Git的軟件

    Git是一種分布式版本控制系統(tǒng),它可以記錄文件的修改歷史和版本變化,并可以支持多人協(xié)同開發(fā)。
    的頭像 發(fā)表于 01-22 09:30 ?963次閱讀
    克服PLC編程的難題—基于<b class='flag-5'>Git</b>的軟件