【问题标题】:Urgent Git help needed - lost most commits需要紧急 Git 帮助 - 丢失了大多数提交
【发布时间】:2020-03-14 05:23:00
【问题描述】:

所以我在做一个项目,一开始我不小心脱离了 Head,但我仍然保持提交等。然后我意识到我与头部分离,所以我尝试执行以下操作以重新连接到头部:

git log -n 1 (I copied the commit)

git checkout master

git branch (long hash I copied)

git merge tmp (here I realize I forgot to name the branch so I typed again:

git branch tmp (long has I copied)

我在这里收到关于重命名(长哈希)如何不明确的警告,并且 Git 通常不会创建以 40 个十六进制字符结尾的引用

git merge tmp

这里 git 说“已经是最新的”

git branch -d tmp

输出:已删除的分支 tmp

完成此操作后,我被带回了我最后一次连接到头部的状态(在我的项目中是这样)。

我搞砸了吗?或者有什么方法可以让我恢复原来的状态?

【问题讨论】:

标签: git github save commit git-commit


【解决方案1】:

首先,你没有搞砸。 当您遇到这种奇怪的情况时,最好在尝试修复之前进行完整备份(包括隐藏文件夹),以防万一。

git reflog 是你的朋友,它会显示你过去所做的提交的哈希值。在您的情况下,您已经签出了 master,然后从 master 创建了一个分支,其名称是您分离头中最后一次提交的哈希。 这反过来又使git checkout 提交变得困难,因为当您输入提交的哈希时,git 假定您指的是具有相同名称的分支。

我尝试重新创建您的情况,并提出了一个逐步计划来恢复您丢失的代码: (仅在进行完整备份后尝试)

  1. git reflog 找到您要恢复的提交的哈希(最有可能的格式为 ie "47a7bdc (HEAD -> master, 7a1.....5b7) HEAD@{3}: commit: 2" )李>
  2. git branch -d <"long hash you copied"> 也可能是您在 reflog 中找到的哈希
  3. git checkout <the hash of the commit you want to recover>

此时,您在分离的头上拥有上次提交的状态。

  1. git branch tmp <the hash of the commit you want to recover> 用您的分离提交真正创建 tmp 分支,就像您可能想要的那样
  2. git checkout master 回到你的主分支,因为创建一个新分支会自动更改它
  3. git merge tmp 将刚刚创建的 tmp 分支合并回 master 分支

此时 git 可能会抱怨合并冲突,如果是这样 - 您必须手动解决这些问题,然后为该合并创建一个新的 commti。

其他提示:

  • 始终与git status 核对您的状态
  • 使用git log --graph --oneline --all 获得视觉参考
  • 我听说某些 git GUI 会删除 reflog 信息,以避免这些问题 a) 仅使用 CLI b) 在您不确定自己在做什么的情况下始终进行完整备份

【讨论】:

  • 好的,非常感谢!我还没有尝试按照您的指示进行操作,但我真的很感激。但是,我怎样才能进行完整备份,以便我可以再次访问 git reflog,以防万一我搞砸了?
  • Git 将其所有数据存储在每个存储库根目录中名为“.git”的文件夹中。这本质上是存储库,因为没有它就只有当前状态。
  • 你先生是程序员中的神。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 2015-12-12
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多