像 git stash
和 git 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)匀豢梢允褂盟?,以及如何找到提交的哈希?
-
存儲
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85851 -
終端
+關(guān)注
關(guān)注
1文章
1135瀏覽量
29885 -
Git
+關(guān)注
關(guān)注
0文章
199瀏覽量
15765
發(fā)布評論請先 登錄
相關(guān)推薦
評論