symlinkから通常のファイルにモードを変更せずに偽のsymlink-fileの内容を変更し、結果をコミットすると、実際のシンボリックリンクを持つOS上では抽出できないBLOBを作成し、シンボリックリンクと思われるオブジェクトがありますが、内容が長すぎてパス名にはならないためです。この問題を隠すことによって、Webインターフェイスはあなたに何の恩恵も与えていません。
おそらく、そのコミットにバックアップして修正し、その後すべてを再コミットする必要があります。 git rebase -i
が助けになりますが、これはまだ簡単ではないかもしれません。特に、シンボリックなシンボリックリンクだが実際にはシンボリックリンクの状態になっている間にファイルをもっと変更した場合は特にそうかもしれません。悪いコミット仮に
がabcdef123
で、あなたはこれを実行する必要があります。
git rebase -i 'abcdef123^'
コミットのリストをエディタであなたを置くであろう。 abcdef123
が最初の行に表示されます。その行でpick
をedit
に変更します。複数の不良コミットがある場合は、すべてをedit
に変更します。保存してエディタを終了します。
これで、不正なファイルをコミットした時点に戻ります。これは歴史を変えて、間違っていたことを正しいものにするチャンスです。
git show
にコミットし、それをINGのファイルとgit add
にオリジナルのシンボリックリンクのパス名を復元することによって、悪い部分を元に戻す点検。あるいは、実際にはgit rm
でsymlinkを適切に削除してから、新しいファイルを作成して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の内部では、シンボリックリンクはシンボリックリンクであり、あなたのようにそれらを混乱させることはできません。
プラス2 – jomofrodo