【发布时间】:2019-10-28 19:42:07
【问题描述】:
我已将 7 个提交(使用 git rebase -i HEAD~7)压缩为一个提交并将更改推送到 bitbucket 服务器。现在,我意识到我需要以原始状态推送 7 个提交。
我试过git reflog 和git reset --hard HEAD@{7} 但只能看到一个提交。
【问题讨论】:
标签: git terminal git-bash git-reset git-squash
我已将 7 个提交(使用 git rebase -i HEAD~7)压缩为一个提交并将更改推送到 bitbucket 服务器。现在,我意识到我需要以原始状态推送 7 个提交。
我试过git reflog 和git reset --hard HEAD@{7} 但只能看到一个提交。
【问题讨论】:
标签: git terminal git-bash git-reset git-squash
在git reflog中,应该有一行,
8847515 HEAD@{7}: rebase -i (start): checkout HEAD~7
现在它可能已在您的存储库中变为 HEAD@{8} 或 HEAD@{9}。找到该行正下方的 stash 条目,它是交互式变基开始之前的原始 HEAD。可能类似于0874c8a HEAD@{10}: commit: foo bar。而是重置到此提交,
git reset 0874c8a --hard
【讨论】:
git reset --hard ORIG_HEAD,如果在挤压和推动之间没有做太多。
撤消变基的最简单方法:
git reset --hard ORIG_HEAD
# or
git checkout -b recoveredBranch ORIG_HEAD
这仅适用于最后一次变基。
现在HEAD@{7} 将指向脑后的 7 个状态。很难预测它会指向哪里。这取决于你一直在做什么。每次重置/结帐都意味着您必须增加这个数字。
作为最后的手段,在 reflog 中找到 rebase 之前的最后一次提交并使用其哈希:
git checkout -b recoveredBranch a0a0ab0a
【讨论】: