私は最終的に自分自身を考え出しました。
ショートバージョン:履歴から削除するために、破損したBLOBを指しているコミットを修正しました。
ロングバージョン:ファイルが何であるか分かっていて、コミットから消えるようにしたいと思ったので、古いコミットを修正することができたと思いました。私はそれが本当にうまくいくとは思っていませんでしたが、やっとそれは終わりました
私は以前のことを試す際に.git/objects内のブロブを削除したことを指摘しなければならない。
まず、私はそれが何であるかを知る必要がありました。そのために私は私がコミットが966a46命名されました見つかったコマンド
git log --raw --all --full-history -- subdir/my-file
を使用....
その後、私はそれを修正するための手順を行いました。それがコミット歳だったので、私は私の編集者がコミットごとに1行で来て、私は私が変更したいコミットの前にある「編集」に「ピック」に変更。
git rebase -- interactive 966a46^
を使用しました
コマンドgit status
は私が消去したいファイルが変更されたことを私に示した:
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: subdir/my-file
私はコミットからそれを削除したかったので、私はrm subdir/my-file
をしました。 git status
が表示されました:
# deleted: subdir/my-file
これは有望でした。
git commit --all --amend
git rebase --continue
しかし、それは、このエラーで失敗しましたいくつかのコミットリベースした後:
error: could not apply 45c2315... did some fancy things
fatal: unable to read 95b6a826cadae849f4932a71d6735ab6ceb47cab
45c2315を私のファイルが変更された最初のコミットされたので、私は単純にコミット改正やリベースを継続的にコミット作成された後。以前のバージョンのファイルが見つからなかったので、ただ失敗しました。
git status
は、とりわけ、私を示した:
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# deleted by us: subdir/my-file
を私は実際にそれが何を意味するのかわからないんだけど、このコミットは、ファイルを修正した後、表示されることになるで最初になるはずでした。だから私はそれが削除されることを望んでいないが、反対に、コミットに追加!だから私は
git add subdir/my-file
を行なったし、確かにgit status
は、「新規ファイル」としてそれを示しました。
その後、私はgit rebase --continue
を実行し、すべてがうまくいって、リベースが成功しました。
git push
は、壊れたブロブについて失敗する代わりにスムーズに進みました。
しかしgit fsck
はまだ失敗していたため、問題が、まだそこにあった。私はすべてを剪定するように頼んだとき
$ git fsck --full
Checking object directories: 100% (256/256), done.
broken link from tree 27e8e7d5b94c1dad5410a8204089828a167a0eaf
to blob 95b6a826cadae849f4932a71d6735ab6ceb47cab
そしてgit gc
は、あまりにも失敗しました。だから私は、私が以前に成功裏にプッシュしたので、新しいリポジトリにすべてを戻してそこから作業するという、最善の行動をとっていることを理解しました。
解決策のいくつかをここで見てみてください:http://stackoverflow.com/q/4254389/1031900 –
この質問は、少し違う破損したツリーについてです。これらの答えのどれも、悲しいことに私を助けることはできません。私はいくつかのことを試してみることにして、仕事をすればここに投稿します。 –