2017-08-22 95 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

相关问题