紧急 Git 需要帮助 - 丢失了大部分提交
Urgent Git help needed - lost most commits
所以我在做一个项目,早期我不小心脱离了 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说"already up to date"
git branch -d tmp
输出:删除分支 tmp
这样做之后,我又回到了上次连接到头部的状态(wayyy 回到我的项目中)。
我搞砸了吗?或者有什么方法可以让我恢复原来的状态?
首先,你没有被搞砸。
当你遇到这种奇怪的情况时,最好在尝试修复它之前进行完整备份(包括隐藏文件夹),以防你搞砸了。
git reflog
是你的朋友,它显示你过去所做的提交的哈希值。在您的情况下,您已经签出 master,然后从 master 创建了一个分支,其名称是分离头中最后一次提交的哈希值。
这反过来又使 git checkout
难以提交,因为当您输入提交的哈希值时 git 假定您指的是具有相同名称的分支。
我尝试重现您的情况,并提出了一个逐步计划来恢复您丢失的代码:
(仅在进行完整备份后尝试)
git reflog
找到您要恢复的提交的哈希值(最有可能的格式是“47a7bdc (HEAD -> master, 7a1.....5b7) HEAD@{3}:提交:2" )
git branch -d <"long hash you copied">
这也可能是您在 reflog 中找到的哈希
git checkout <the hash of the commit you want to recover>
此时您在分离头上拥有上次提交的状态。
git branch tmp <the hash of the commit you want to recover>
用你的分离提交真正创建 tmp 分支,就像你想的那样
git checkout master
回到你的 master 分支,因为创建一个新分支会自动改变它
git merge tmp
将刚刚创建的tmp分支合并回master分支
此时 git 可能会抱怨合并冲突,如果是这样 - 您必须手动解决这些问题,然后为该合并创建一个新的 commti。
其他提示:
- 总是检查
git status
你处于什么状态
- 使用
git log --graph --oneline --all
获得视觉参考
- 我听说一些 git GUI 会删除 reflog 信息,以避免这些问题 a) 仅使用 CLI b) 在您不确定自己在做什么的情况下总是进行完整备份
所以我在做一个项目,早期我不小心脱离了 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说"already up to date"
git branch -d tmp
输出:删除分支 tmp
这样做之后,我又回到了上次连接到头部的状态(wayyy 回到我的项目中)。
我搞砸了吗?或者有什么方法可以让我恢复原来的状态?
首先,你没有被搞砸。 当你遇到这种奇怪的情况时,最好在尝试修复它之前进行完整备份(包括隐藏文件夹),以防你搞砸了。
git reflog
是你的朋友,它显示你过去所做的提交的哈希值。在您的情况下,您已经签出 master,然后从 master 创建了一个分支,其名称是分离头中最后一次提交的哈希值。
这反过来又使 git checkout
难以提交,因为当您输入提交的哈希值时 git 假定您指的是具有相同名称的分支。
我尝试重现您的情况,并提出了一个逐步计划来恢复您丢失的代码: (仅在进行完整备份后尝试)
git reflog
找到您要恢复的提交的哈希值(最有可能的格式是“47a7bdc (HEAD -> master, 7a1.....5b7) HEAD@{3}:提交:2" )git branch -d <"long hash you copied">
这也可能是您在 reflog 中找到的哈希
git checkout <the hash of the commit you want to recover>
此时您在分离头上拥有上次提交的状态。
git branch tmp <the hash of the commit you want to recover>
用你的分离提交真正创建 tmp 分支,就像你想的那样git checkout master
回到你的 master 分支,因为创建一个新分支会自动改变它git merge tmp
将刚刚创建的tmp分支合并回master分支
此时 git 可能会抱怨合并冲突,如果是这样 - 您必须手动解决这些问题,然后为该合并创建一个新的 commti。
其他提示:
- 总是检查
git status
你处于什么状态 - 使用
git log --graph --oneline --all
获得视觉参考 - 我听说一些 git GUI 会删除 reflog 信息,以避免这些问题 a) 仅使用 CLI b) 在您不确定自己在做什么的情况下总是进行完整备份