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

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

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

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

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

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

在工作目錄中存儲(chǔ)更改

在我們的例子中,假設(shè)我們已經(jīng)克隆了一個(gè) Git Repo 。現(xiàn)在,讓我們對(duì) 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 命令來(lái)暫時(shí)擱置我們的修改。

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

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

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

nothing to commit, working tree clean

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

讓我們來(lái)看看如何恢復(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...

正如我們?cè)谧詈笠恍锌吹降哪菢樱?code>git stash pop 不僅恢復(fù)了被存儲(chǔ)的修改,而且還刪除了對(duì)其相關(guān)提交的引用。

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

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

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

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

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

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

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

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

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

使用哈希值來(lá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ù)了先前所隱藏的變化。

找到所有的哈希提交

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

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

這里,我們把 -no-flog 選項(xiàng)和 awk 結(jié)合起來(lái),只為我們過(guò)濾出哈希值。

總結(jié)

在這篇文章中,我們看到了git stash 是如何工作的,以及當(dāng)我們使用它時(shí)它是如何丟棄一個(gè)條目的。當(dāng)我們知道一個(gè)被丟棄的條目的哈希值時(shí),我們?nèi)匀豢梢允褂盟约叭绾握业教峤坏墓V?

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

    關(guān)注

    13

    文章

    4226

    瀏覽量

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

    關(guān)注

    1

    文章

    1106

    瀏覽量

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

    關(guān)注

    0

    文章

    196

    瀏覽量

    15720
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在Linux設(shè)置Git

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

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

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

    如何隱藏CAD圖紙的部分圖形對(duì)象?CAD局部隱藏

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

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

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

    何在Project Explorer隱藏文件夾?

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

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

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

    何在Linux查看隱藏文件

    在windows可以查看隱藏的文件。在Linux也可以查看隱藏文件且非常容易。要查看隱藏文件運(yùn)行`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 ?1997次閱讀

    Git是什么

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

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

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

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

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

    Git是什么 Git介紹

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

    git如何記錄每次更新到倉(cāng)庫(kù)

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

    Git命令解決常見(jiàn)場(chǎng)景記錄

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

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

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