恢复丢失的提交到分离的头
Resurrect lost commits to deattached head
我定期提交我的进步,今天想推动它。
由于某些原因,我收到一个错误消息,它有一个分离的头和 (deny updating a hidden ref)
。现在,在执行各种步骤以重新连接它之后,我的工作就消失了。我无法恢复它,甚至无法找到这些提交。我经常承诺但没有推动。现在我有点不知所措了。
这是历史,我以为我在分支 Feature_SaveAs_Unfinished
。
2004 git commit -am "Removing old logs"
2005 git push
2006 git pull origin Feature_SaveAs_Unfinished
2007 git push origin origin/Feature_SaveAs_Unfinished
None 其中由于头部分离而起作用。
2007 git push origin origin/Feature_SaveAs_Unfinished
2008 git push --mirror
2009 git pull
2010 git pull origin Feature_SaveAs_Unfinished
2011 git push origin Feature_SaveAs_Unfinished
2012 git status
2013 git checkout origin/Feature_SaveAs_Unfinished
我收到一条消息,如果我想保存我的工作,我应该为它创建一个额外的分支。
2014 git branch Feature_SaveAs_040221_Automerge
2015 git checkout origin/Feature_SaveAs_Unfinished
2016 git status
2017 git pull
2018 git pull origin Feature_SaveAs_Unfinished
2019 git checkout origin/Feature_SaveAs_Unfinished
此时我在 SO 上查找了一些解决方案:
接下来的步骤是根据 post:
2021 git branch temp
2022 git checkout temp
2023 git log --graph --decorate --pretty=oneline --abbrev-commit master origin/master temp
2024 git diff master temp
2025 git diff origin/master temp
2026 git branch -f master temp
2027 git checkout master
2028 git status
2029 git branch -d temp
我正试图回到我工作的分支,因为我不在 master 上。
2030 git status
2031 git branch -f Feature_SaveAs_040221_Automerge master
2032 git checkout Feature_SaveAs_040221_Automerge
2033 git status
2034 git pull
此时我找不到我的作品了。我更改的文件是一些非常旧的版本。 (可能来自主人)。
我不知道如何回复他们。
我知道我最近在调试消息中使用了 ☆
,所以我检查了一下。
$ rgrep -rni ☆
Binary file .git/objects/98/9574bda27235aa00dd6ad2846512c69a87a2a3 matches
Binary file .git/objects/9d/c18eb8bba4d381ad0a96c782fec57928dc92d2 matches
Binary file .git/objects/pack/pack-ca6560ce8bd83b69093cea6fbd492ff9ef1a54c0.pack matches
这个是另外一回事:
$ ll 9574bda27235aa00dd6ad2846512c69a87a2a3
-r--r--r-- 1 qohelet qohelet 2244035 Nov 3 17:38 9574bda27235aa00dd6ad2846512c69a87a2a3
但仅此而已:
$ ll c18eb8bba4d381ad0a96c782fec57928dc92d2
-r--r--r-- 1 qohelet qohelet 3581541 Feb 2 16:51 c18eb8bba4d381ad0a96c782fec57928dc92d2
我使用了 gitk 等工具来显示最后的提交。我找不到任何。即使是当前创建的分支 Feature_SaveAs_040221_Automerge
也指向几周前完成的提交(即使我半小时前创建了分支)。
怎么办?我将如何获得我的更改并提交到分离的提交?
编辑 (1):
$ git reflog
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{0}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{1}: reset: moving to HEAD
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{2}: checkout: moving from Feature_SaveAs_Unfinished to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{3}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{4}: checkout: moving from master to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{5}: checkout: moving from Feature_SaveAs_040221_Automerge to master
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{6}: checkout: moving from Feature_SaveAs_Unfinished to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{7}: pull: Fast-forward
5ac1604 HEAD@{8}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{9}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{10}: checkout: moving from master to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{11}: checkout: moving from temp to master
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{12}: checkout: moving from b21832d0d8e5b9b58aa33cd8fd1c11815f635756 to temp
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{13}: checkout: moving from bb442dfc6900031ab9a17be4f3ea465a90d7b86f to origin/Feature_SaveAs_Unfinished
bb442df HEAD@{14}: commit: Removing old logs
f7ef5de HEAD@{15}: commit: SaveAs sollte gehen. Test fehlt noch
Git 显示
git show bb442df
commit bb442dfc6900031ab9a17be4f3ea465a90d7b86f
Author: qohelet
Date: Thu Feb 4 09:03:16 2021 +0000
Removing old logs
diff --git a/DjangoMoP/settings.py b/DjangoMoP/settings.py
index 3e81225..316d976 100755
运行 git reflog
得到 Git 溢出 HEAD
reflog 的内容。这将为您提供提交哈希 ID(在左侧)、编号为 @{...}
后缀的名称(在哈希 ID 旁边),以及有关 HEAD
识别的提交的原因的信息(对于提交,即提交主题行)。
如果其中一个主题行看起来很有希望,请尝试提交哈希 ID:例如,git show <em>hash</em>
。如果那是您正在寻找的提交,那么您已经找到了:为它创建一个分支名称。如果没有,请继续使用 reflog。要创建指向给定提交哈希 hash
的新分支名称 newname
,请使用 git 分支 <em>newname hash</em>
.
鉴于您有一些可以搜索的数据(或像 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
这样的 blob 哈希 ID——例如,查看 git show 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
的输出以查看是否是感兴趣的文件)您还可以在 reflog 中搜索提交,以查看它们中是否有任何一个在其快照中具有具有该 blob 哈希 ID 的文件。这通常不如快速“查看前几个 reflog 条目”方法有效,但请注意 git ls-tree -r <em>hash</em> | grep 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
是一种查明给定的提交哈希 ID hash
是否指向该文件版本的方法。
旁注:您链接的答案指的是某人在 git rebase
中对他们的分离式 HEAD 设置进行操作,然后丢失了它;您引用的命令很有用在您设置了分支名称以便能够找到提交之后。
我定期提交我的进步,今天想推动它。
由于某些原因,我收到一个错误消息,它有一个分离的头和 (deny updating a hidden ref)
。现在,在执行各种步骤以重新连接它之后,我的工作就消失了。我无法恢复它,甚至无法找到这些提交。我经常承诺但没有推动。现在我有点不知所措了。
这是历史,我以为我在分支 Feature_SaveAs_Unfinished
。
2004 git commit -am "Removing old logs"
2005 git push
2006 git pull origin Feature_SaveAs_Unfinished
2007 git push origin origin/Feature_SaveAs_Unfinished
None 其中由于头部分离而起作用。
2007 git push origin origin/Feature_SaveAs_Unfinished
2008 git push --mirror
2009 git pull
2010 git pull origin Feature_SaveAs_Unfinished
2011 git push origin Feature_SaveAs_Unfinished
2012 git status
2013 git checkout origin/Feature_SaveAs_Unfinished
我收到一条消息,如果我想保存我的工作,我应该为它创建一个额外的分支。
2014 git branch Feature_SaveAs_040221_Automerge
2015 git checkout origin/Feature_SaveAs_Unfinished
2016 git status
2017 git pull
2018 git pull origin Feature_SaveAs_Unfinished
2019 git checkout origin/Feature_SaveAs_Unfinished
此时我在 SO 上查找了一些解决方案: 接下来的步骤是根据 post:
2021 git branch temp
2022 git checkout temp
2023 git log --graph --decorate --pretty=oneline --abbrev-commit master origin/master temp
2024 git diff master temp
2025 git diff origin/master temp
2026 git branch -f master temp
2027 git checkout master
2028 git status
2029 git branch -d temp
我正试图回到我工作的分支,因为我不在 master 上。
2030 git status
2031 git branch -f Feature_SaveAs_040221_Automerge master
2032 git checkout Feature_SaveAs_040221_Automerge
2033 git status
2034 git pull
此时我找不到我的作品了。我更改的文件是一些非常旧的版本。 (可能来自主人)。 我不知道如何回复他们。
我知道我最近在调试消息中使用了 ☆
,所以我检查了一下。
$ rgrep -rni ☆
Binary file .git/objects/98/9574bda27235aa00dd6ad2846512c69a87a2a3 matches
Binary file .git/objects/9d/c18eb8bba4d381ad0a96c782fec57928dc92d2 matches
Binary file .git/objects/pack/pack-ca6560ce8bd83b69093cea6fbd492ff9ef1a54c0.pack matches
这个是另外一回事:
$ ll 9574bda27235aa00dd6ad2846512c69a87a2a3
-r--r--r-- 1 qohelet qohelet 2244035 Nov 3 17:38 9574bda27235aa00dd6ad2846512c69a87a2a3
但仅此而已:
$ ll c18eb8bba4d381ad0a96c782fec57928dc92d2
-r--r--r-- 1 qohelet qohelet 3581541 Feb 2 16:51 c18eb8bba4d381ad0a96c782fec57928dc92d2
我使用了 gitk 等工具来显示最后的提交。我找不到任何。即使是当前创建的分支 Feature_SaveAs_040221_Automerge
也指向几周前完成的提交(即使我半小时前创建了分支)。
怎么办?我将如何获得我的更改并提交到分离的提交?
编辑 (1):
$ git reflog
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{0}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{1}: reset: moving to HEAD
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{2}: checkout: moving from Feature_SaveAs_Unfinished to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{3}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{4}: checkout: moving from master to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{5}: checkout: moving from Feature_SaveAs_040221_Automerge to master
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{6}: checkout: moving from Feature_SaveAs_Unfinished to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{7}: pull: Fast-forward
5ac1604 HEAD@{8}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_Unfinished
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{9}: checkout: moving from Feature_SaveAs_040221_Automerge to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{10}: checkout: moving from master to Feature_SaveAs_040221_Automerge
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{11}: checkout: moving from temp to master
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{12}: checkout: moving from b21832d0d8e5b9b58aa33cd8fd1c11815f635756 to temp
b21832d (HEAD -> Feature_SaveAs_Unfinished, origin/Feature_SaveAs_Unfinished, master, Feature_SaveAs_040221_Automerge) HEAD@{13}: checkout: moving from bb442dfc6900031ab9a17be4f3ea465a90d7b86f to origin/Feature_SaveAs_Unfinished
bb442df HEAD@{14}: commit: Removing old logs
f7ef5de HEAD@{15}: commit: SaveAs sollte gehen. Test fehlt noch
Git 显示
git show bb442df
commit bb442dfc6900031ab9a17be4f3ea465a90d7b86f
Author: qohelet
Date: Thu Feb 4 09:03:16 2021 +0000
Removing old logs
diff --git a/DjangoMoP/settings.py b/DjangoMoP/settings.py
index 3e81225..316d976 100755
运行 git reflog
得到 Git 溢出 HEAD
reflog 的内容。这将为您提供提交哈希 ID(在左侧)、编号为 @{...}
后缀的名称(在哈希 ID 旁边),以及有关 HEAD
识别的提交的原因的信息(对于提交,即提交主题行)。
如果其中一个主题行看起来很有希望,请尝试提交哈希 ID:例如,git show <em>hash</em>
。如果那是您正在寻找的提交,那么您已经找到了:为它创建一个分支名称。如果没有,请继续使用 reflog。要创建指向给定提交哈希 hash
的新分支名称 newname
,请使用 git 分支 <em>newname hash</em>
.
鉴于您有一些可以搜索的数据(或像 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
这样的 blob 哈希 ID——例如,查看 git show 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
的输出以查看是否是感兴趣的文件)您还可以在 reflog 中搜索提交,以查看它们中是否有任何一个在其快照中具有具有该 blob 哈希 ID 的文件。这通常不如快速“查看前几个 reflog 条目”方法有效,但请注意 git ls-tree -r <em>hash</em> | grep 9dc18eb8bba4d381ad0a96c782fec57928dc92d2
是一种查明给定的提交哈希 ID hash
是否指向该文件版本的方法。
旁注:您链接的答案指的是某人在 git rebase
中对他们的分离式 HEAD 设置进行操作,然后丢失了它;您引用的命令很有用在您设置了分支名称以便能够找到提交之后。