在尝试改装给主人之后,我在我的树枝上弄得一团糟。
在我的提交历史中,我进行了相当多的重构(重命名和移动),以及删除类。而且我不应该推送到远程存储库。 (我知道,从那以后我一直在踢自己)。
但是,做了什么。现在,因为rebase重写了历史记录并提交了(?)(通过在rebase期间解决冲突),我无法重置为先前的提交HEAD~2重新开始,所有提交都被重写并且提交错误。
我可以从git获取HEAD~2的快照,是否可以将快照合并(rebase)回到我的分支,回滚更改,然后重新开始?
提前致谢!
大卫
从我们的内部git网页更新,我可以看到之前的提交:
commit 6f577850231fed07eebdacd3bc5862f84356d803
tree 8be1d60056697bc1b8d7284c4e85a6d1738ac3e2 tree | snapshot
parent 1ca61d4dd69b7be649906834d44bb7fec390153d commit | diff
我可以通过点击“快照”链接下载gz中的快照。 但是,当我尝试这样做时:
git checkout -b newBranch 6f577850231fed07eebdacd3bc5862f84356d803
我得到了:
fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803
如果我跑:
git checkout -b --force newBranch 6f577850231fed07eebdacd3bc5862f84356d803
我得到了:
fatal: git checkout: updating paths is incompatible with switching branches.
我猜这个提交只存在于远程存储库中?我怎么能用git结账呢?
解决方案: 这个答案是我的问题的解决方案:Undoing a git rebase
答案 0 :(得分:2)
fatal: reference is not a tree: 6f577850231fed07eebdacd3bc5862f84356d803
OP David Zhao发现不完整的rebase或invalide HEAD引用也可能触发该消息:
“Undoing a git rebase”
即git reset --hard HEAD@{x}
,其中“x
”是git reflog
中的HEAD引用。
初步答案:它也适用于子模块(这里不是这种情况)
请参阅“Git submodule head 'reference is not a tree' error”:
有人做了一个超级项目提交,它引用了子模块子中未发布的提交。
因此,如果你有子模块,你需要确保父repo和子模块是同步的,并获取父repo(将你的gitweb页面中显示的历史记录更新)到 local repo,在你开始结账任何提交之前 如果该提交来自子模块,请在执行该检查之前先转到该子模块目录。
从那里,您可以将该分支合并回您推送的分支(例如,'master
'),创建新提交(因此不会重写历史记录) ),选择“git command for making one branch like another”中描述的方法之一。