2017-08-22 142 views
0

我修改了分支A中的一些文件,然後使用git add來添加這些修改過的文件。 但我忘了用git commit提交修改到當前分支。然後我用git checkout B切換到另一個分支。 當我再次切換到分支A時,我發現沒有任何修改可以在這裏找到。 有什麼方法可以讓我修改文件嗎?如何在git add和git checkout沒有git commit後重新獲得diff?

+0

您在檢出B之前是否使用過'git stash'? – 17slim

+0

你確定沒有任何修改?也許修改後的文件未分區? – destoryer

+0

不,我在檢出B之前沒有使用git stash。當我在分支A時使用git status時,我看不到未修改的修改 –

回答

0

如果git允許您切換分支,即使未提交更改,這些更改也將傳送到您切換到的分支。所以如果你檢查這兩個分支之間的差異,它不會顯示任何改變。嘗試使用任何其他基本分支的差異。希望

0

git add通常會將對象寫入對象數據庫。如果它不再可以從索引或任何提交中訪問,它將是一個懸浮的斑點。

$ git fsck --no-reflogs | grep 'dangling blob' 
dangling blob 5cd8df407a53f3cf1a00d7df9b92973fc7124649 
dangling blob a15ac56b6ac98b0b26c4d30bd299cf5cea817b83 
dangling blob a052e2e82624bfa14d7004a30e971cfc543d3759 
dangling blob b3cae5cf028ad4728b344193a7c6fe4e76e36af3 
dangling blob bb428320e3f8496ee844dfe1826e5f705e47b0c8 
dangling blob aa9bc6e7a3078a91a895f9ade9ecb0d3f46783a0 
dangling blob 0094f013e9120ac2168248245ee492f1c551754d 
dangling blob 896c4a4752fab07a7be22cc068c50d4b8021c8a9 
dangling blob f6fc725dc3f01cedee7933651e202fa1e46101a4 
$ git cat-file -p 5cd8df407a53f3cf1a00d7df9b92973fc7124649 
... 

您可以一個接一個地打印出來,試圖找出丟失的東西。 (另請參閱--lost-found選項。)

+0

我試過這個,但似乎只有通過git commit提交的更改可以被發現 –

+0

@張張彪然後,無論您使用了什麼'git add -N'都不會寫任何東西到對象數據庫,或者它是附加到索引或某處提交。它肯定會找到由'git add'編寫的對象,然後在提交之前丟失。 – ephemient

0

我發現它們在藏匿處。在git添加大部分文件之後,我使用git存儲,希望將剩餘的文件存儲起來。但似乎修改後的文件全部放到藏匿處,無論它們是否使用git add添加或不添加。

+0

你在評論中聲稱你*沒有使用'git stash'。 'git stash'的作用是編寫至少兩個*提交,一個用於當前索引內容,另一個用於當前工作樹註釋。有一個可選的第三個提交保存更多的文件:或者未被忽略的未被忽略的文件,或者未被追蹤的文件,包括那些被忽略的文件。這兩個或三個提交是作出的,但存儲在* no *分支上,作爲從當前提交懸浮的一類提交。 – torek

相關問題