目前是否还要撤消执行git checkout master -f
的本地更改?
作为一个傻瓜我在错误的分支中本地做了一堆更改并且愚蠢地误读了一个帖子并执行了所述命令,所以我所有的本地更改都恢复到了3个版本:((悲伤的时候)。
笑着指着欢迎,但任何建议也会受到赞赏。
答案 0 :(得分:2)
这取决于您是否提交了这些本地更改,或者是否有一个带有大量未提交更改的脏工作树。在后一种情况下,你没有太多可以做的,因为你扔掉了变化而没有保存它们。但在前者中,您可以从reflog中恢复它。查看git reflog show HEAD
的输出,看看是否有任何一个看起来像你要返回的ocmmit。然后,您可以使用checkout
或各种风格的reset
来恢复它。
答案 1 :(得分:1)
是。尝试:
git reflog
查看更改列表。找到您想要和做的更改:
git checkout <changeid>
发生的事情是您将分支更改为指向其他位置,并且这些提交不再有任何分支指向它们。但是,变化本身并没有消失,你只是看不到它们。在git删除之前,他们会在reflog中闲逛最多30天。
答案 2 :(得分:0)
是的。
您可以选择多种方式 阅读此答案,详细了解您拥有的每个选项:
How to move HEAD back to a previous location? (Detached head)
等等。
最好的答案是使用reflog
来“回滚”你所做的更改,但在附带的答案中再次阅读所有相关内容。
git reflog
git reflog
git checkout HEAD@{...}
这会让你回到你想要的提交
重要提示:
除非执行gc,否则git永远不会丢弃数据。所以,即使你没有看到这个提交仍然在你的本地存储库中,你只需要找到它。
你可以通过执行git fsck找到它,它将“找到”此时无法访问的所有提交。现在你只需要找到一个并检查出来
如果您提交了更改(即使您刚刚将文件添加到停靠位中,也是如此),您可以恢复内容。
每次向暂存区域添加内容时,git都会开始跟踪它并将其存储在.git/objects
文件夹中。
由于您添加了文件并提交了它们,因此它们已经存储在那里,一旦您执行git checkout master -f
,文件仍然存在,但与您的存储库“断开连接”。
在git“language”中命名为悬空对象。
只要你没有强制移除它们的git gc
,你就可以查看这些对象。
# scan your repo for dangeling file
git fsck --full
然后查看内容使用:
git cat-file -p <sha-1>