由于电源问题,我的Git存储库在经过几次硬重启后损坏了,现在我无法修复它(我在最后一次电源故障时暂停了一些文件):
$ git status
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git fsck
fatal: failed to read object 24377c609184c192f3f3c1733bac7115c1080758: Invalid argument
$ git branch -a
(...works, lists branches...)
$ git checkout someotherbranch
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git log
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git log someotherbranch
(...works, shows commits...)
Run Code Online (Sandbox Code Playgroud)
所以,正如你所看到的,我当前的分支已经搞砸了,我似乎无法修复它.我可以尝试修复此问题?
Nas*_*ges 36
我对类似情况的解决方案是.git/refs/heads/my-working-branch使用先前提交的哈希值(可以在其中找到.git/logs/HEAD)替换损坏对象的哈希值.
nbu*_*ell 17
这恰好发生在我身上.我将存储库重新放入新文件夹中,并手动移动我的最新更改.技术含量低,但每次都有效.希望你能记住你最后的改变.
San*_*ika 12
对我来说最简单的解决方案:您应该git clone在一个新文件夹中,然后将干净的new_folder/.git替换为旧文件夹(损坏的文件夹)。它对我来说效果很好!
git clone ...(remote) new_folder
mv old_folder/.git old_folder/.git_old
cp -R new_folder/.git old_folder/
Run Code Online (Sandbox Code Playgroud)
对我来说,我已经在OS X中使用非Apple SSD(不推荐使用)启用了TRIM,并且显然在我的启动盘上造成了各种损坏.因此,腐败的提交在历史上是深刻的.
我不太关心修复我的存储库,除了我有一些本地分支太过实验性而无法推动到远程存储库,我想在这些分支中挽救工作.
从理论上讲,由于这是一个本地存储库,我觉得Git应该能够使用origin恢复/修复自己.为什么这不可能?
无论如何,我偶然发现了这个很酷的策略,将分支推送到另一个本地Git存储库.不幸的是,将存储库克隆到../repo_copy然后将其用作本地远程导致以下错误:
! git push --force local_remote HEAD
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
error: failed to push some refs to '/Users/steve/Dev/repo_copy'
Run Code Online (Sandbox Code Playgroud)
所以我开始使用一个空的存储库,然后将分支推送到它工作正常.因此对于我git log没有结束的任何本地分支:
....
Fixing cukes
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我只是检查出来,然后做git push --force local_remote HEAD.我做的最后一件事是:
! cd ~/Dev/repo_copy
! git remote add origin git@github.com:sdhull/my_repo.git # real remote
Run Code Online (Sandbox Code Playgroud)
然后我进入git config -e并建立了我的主分支,并且在没有丢失的情况下恢复运行!
尝试备份存储库,然后运行git reset --hard HEAD@{1}以返回到上一个HEAD,看看是否有效.它可能只是HEAD被破坏的电流.
(fsck如果还没有,也应该在磁盘上运行.)
另一种对我有用的替代方法是使用以下方法将 Git 头和索引重置为以前的状态:
git reset --keep
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下命令,但它们对我不起作用,但可能对你有用:
git reset --mixed
git fsck --full
git gc --auto
git prune --expire now
git reflog --all
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,并使用git-repair执行了以下步骤
cp myrepo myrepo.bakcd myrepogit repair --force(首先尝试不使用force)成功后,树被设置回上次工作提交。
然后我将meld myrepo myrepo.bak更改从损坏的存储库的工作树应用到修复的存储库。
| 归档时间: |
|
| 查看次数: |
77017 次 |
| 最近记录: |