首先我结帐分行
> git checkout -b renaming-Foo-to-Bar
然后我编辑文件以将类Foo的实例重命名为Bar。随后
> git add -u
但现在我省略了git commit -m "renamed Foo to Bar"
。
认为我确实提交了,我继续将分支合并到主人。
> git checkout master
> git merge renaming-Foo-to-Bar
只有在我阅读合并消息之后(某种类型的东西"没有什么可以合并") 我意识到我没有承诺。
IIUC,我现在有一个所谓的"悬挂提交",并且通过运行
> git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 03c044a..cb
dangling commit ab8076f..47
dangling commit 128532d..99
dangling commit 5605e2d..4a
我可以恢复它。但dangling commit
和dangling blob
消息没有时间戳或其他识别信息。
如何恢复这种悬空提交?
不幸的是我的dangling commits/blobs
很多:
> git fsck --lost-found | wc
Checking object directories: 100% (256/256), done.
52 142 2806
Running git show 03c044a..cb
在前几个和最后几个SHA中揭示了我历史深处的变化,而不是最近的变化。
答案 0 :(得分:1)
只有在我读完合并消息(某种类似“无需合并”之后)之后才意识到我没有提交。
...在这种情况下,您仍然应该“更改”您的更改,即您已对索引进行了更改。 git status
应该显示准备提交的所有内容。
IIUC,我现在有一个所谓的“悬挂提交”......
否:这些是确实存在的提交(因此必须在某些时候进行),但现在没有外部名称可以找到它们。由于您没有提交,因此该提交尚不存在。
假设你仍想在分支上提交重命名,你应该只需要切换回你的重命名分支,然后提交。有关您目前所做的工作的详情,请参阅Git - checkout another branch when there are uncommitted changes on the current branch。
答案 1 :(得分:0)
如果您没有提交并且只是暂时更改并且它们现在已丢失,那么找到更改的唯一解决方案是搜索悬空blob(当您刚刚进行更改时,不会创建任何提交对象,也不会树对象:-()
您可以尝试按日期对相应文件进行排序,并使用命令git cat-file -p SHA1
显示内容。
上周我做了类似的事情来保存同事,将所有blob内容放在文件夹中的文件中,然后使用文本编辑器找到所需的文件。