【问题标题】:Revert merge from master that overwrote uncommitted files on branch从覆盖分支上未提交文件的 master 恢复合并
【发布时间】:2020-03-11 14:59:42
【问题描述】:

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

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


    【解决方案1】:

    当您运行git checkout . 时,您的文件会更新以匹配它们的索引状态。这意味着本地更改将丢失。不幸的是,没有办法让它们恢复原状(只能用取消删除工具试试运气)。

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


    注意:未提交的更改不会提交,因此它们不“属于”任何分支。这意味着他们很容易迷路,没有简单的方法可以让他们回来。由于任何分支(或任何 ref)上都没有提交,因此它们也不会出现在 reflog 中。

    但是,您可以恢复文件内容的可能性很小。在丢弃本地更改之前,您最近是否运行过git stash?或者您是否正在准备提交并在这些文件中有added 更改?如果是这样,您可以运行git fsck,寻找“悬空斑点”,使用git cat-file 检查它们并将它们保存到磁盘。 git fsck --lost-found 也可能对您的情况有所帮助,请参阅 How to recover files from missing tree and dangling blobs?Recover dangling blobs in gitRecover files after bad git reset --hard command

    【讨论】:

    • 所以即使我在master中运行git checkout .,它仍然影响我的分支,因为我合并了?不幸的是,我从未隐藏或添加。
    • 不,它不会影响任何分支。见倒数第二段。只要没有提交更改,就不会属于任何分支。创建新分支不会将任何未暂存的更改移动到该分支。它们仍然只存在于工作目录中,而不是任何分支上
    猜你喜欢
    • 2012-11-09
    • 2019-08-04
    • 2017-07-21
    • 1970-01-01
    • 2017-07-14
    • 2022-01-23
    • 2013-09-21
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多