从覆盖分支上未提交文件的主文件还原合并



我有一个主分支,其中包含未声明/未提交的更改。这些是我运行的命令。

git branch dev
git checkout master
git checkout .
git pull
git checkout dev
git fetch origin
git merge origin/master

我所有的更改都从dev中的文件中消失了。在与master合并时,我从未收到过冲突警告。我在两个分支上的提交历史看起来完全相同。我试过git reflog,但没有用。

hash6 HEAD@{0}: reset: moving to HEAD@{8}
hash1 HEAD@{1}: reset: moving to HEAD@{8}
hash2 HEAD@{2}: reset: moving to HEAD@{8}
hash1 HEAD@{3}: reset: moving to HEAD@{10}
hash3 HEAD@{4}: reset: moving to HEAD@{10}
hash5 HEAD@{5}: reset: moving to HEAD@{10}
hash4 HEAD@{6}: reset: moving to HEAD@{10}
hash2 HEAD@{7}: checkout: moving from master to dev
hash2 HEAD@{8}: checkout: moving from dev to master
hash2 HEAD@{9}: merge origin/master: Fast-forward
hash1 HEAD@{10}: checkout: moving from master to dev
hash2 HEAD@{11}: commit: commit-message
hash1 HEAD@{12}: checkout: moving from dev to master
hash1 HEAD@{13}: checkout: moving from master to dev
hash1 HEAD@{14}: pull: Fast-forward
hash3 HEAD@{15}: pull: Fast-forward
hash5 HEAD@{16}: reset: moving to origin/master
hash4 HEAD@{17}: clone: from git@github.com:my/my-repo

有什么方法可以恢复那些未提交的更改吗?我觉得他们不应该毫无征兆地消失,但我在任何地方都找不到他们。

运行git checkout .时,会更新文件以匹配其索引状态。这意味着本地更改将丢失。不幸的是,没有办法把它们拿回来(除了用取消删除工具碰碰运气(。

git checkout .在您的情况下是不必要的(合并(。如果执行该操作是因为需要一个干净的工作目录,请下次使用git stash save+git stash pop


注意:未记录的更改不会提交,因此它们不"属于"任何分支。这意味着他们很容易迷路,没有简单的方法可以找回他们。由于在任何分支(或任何引用(上都没有提交,因此它们也不会显示在reflog中。

但是,您可以恢复文件内容的可能性很小。在放弃本地更改之前,您最近是否运行过git stash?还是您正在准备提交,并且对这些文件进行了added更改?如果是这样,您可以运行git fsck,查找"悬空Blob",使用git cat-file检查它们并将它们保存到磁盘。git fsck --lost-found可能对您的情况也有帮助,请参阅如何从丢失的树和悬挂的Blob中恢复文件?,恢复git中的悬挂Blob,或在错误的git重置后恢复文件--硬命令

相关内容

最新更新