モードをシンボリックリンクから通常のファイルに変更せずに偽のシンボリックリンクファイルの内容を変更し、結果をコミットするとすぐに、実際のシンボリックリンクを使用して OS で抽出できない blob を作成しました。シンボリックリンクであるはずのオブジェクトですが、その内容が長すぎてパス名にはなりません。Web インターフェースは、この問題を隠してあなたに何の恩恵も与えていません。
おそらく、そのコミットまでバックアップして修正し、その後すべてを再コミットする必要があります。git rebase -i
助けになりますが、特に、この偽のシンボリックリンクであるが実際にはシンボリックリンクではない状態にある間にファイルにさらに変更を加えた場合は、簡単ではないかもしれません.
悪いコミットがabcdef123
であるとすると、これを行う必要があります。
git rebase -i 'abcdef123^'
これにより、コミットのリストを含むエディターが表示されます。abcdef123
最初の行にある必要があります。その行で、に変更pick
しedit
ます。悪いコミットが複数ある場合は、それらをすべて に変更しedit
ます。エディターを保存して終了します。
これで、不良ファイルをコミットした時点に戻ります。これは歴史を変えるチャンスであり、かつて間違っていたことを正すことができます。でコミットを調べます
git show
元のシンボリックリンクのパス名をファイルに復元してgit add
ing することで、悪い部分を元に戻します。または、シンボリックリンクを適切に削除してgit rm
から、新しいファイルを作成することもできますgit add
。最初のオプションを選択する場合、シンボリック リンクの内容は単なるパス名であることに注意してください。これはテキスト ファイルではありません。末尾に改行がありません。改行を追加するテキスト エディターで編集すると、シンボリック リンクが壊れます (名前に改行が含まれるファイルを指します)。
を完了したらgit add
、修正したコミットを履歴のその場所に再挿入します。
git commit --amend
git rebase --continue
複数のコミットを からpick
に変更したedit
場合は、それぞれに対してその手順を繰り返す必要があります。決勝git rebase --continue
はあなたを現在に戻します。
リベース中に過去のコミットを行っていて、コミット全体が悪いことに気付いた場合 (シンボリックリンクを、それが指しているファイルの変更されていないコンテンツに置き換える以外に何もしていません)、git rebase --skip
修正して続行する代わりにできます。これが発生することが事前にわかっている場合は、git rebase -i
に変更する代わりに、リストpick
から悪いコミットを削除することができますedit
。
不正なコミットの影響を受けるブランチが複数ある場合は、ブランチごとに手順全体を繰り返す必要があります。ブランチをチェックアウトし、git rebase -i
完了まで実行して ( git rebase --continue
「リベースに成功しました」と表示されます)、次のブランチをチェックアウトしてもう一度実行します。
将来、開発作業を Windows と実際の OS の間で分割する場合は、Windows で cygwin を使用してください。cygwin の内部では、シンボリック リンクはシンボリック リンクであり、あなたがしたようにそれらを台無しにすることはできません。