2

コミットする前に「gitadd」を元に戻す方法に似た質問がありますか?、ただし重要な違いがあります。

バックグラウンド:

完了時にリポジトリに追加するファイルを生成するコードを実行しています。ファイルを生成しているコードは新しいコードであり、流動的であるため、変更を加えて複数回実行することがあります。

途中で、生成されたファイルをインデックスに追加しているので、最後に1つの大きなコミットの準備ができています。これにより、コードへの変更によって出力に変更が加えられるかどうか、また作成される場合はそれらの変更が何であるかを確認することもできます。Changes to be committedしかし...セクション(としてnew fileChanges not staged for commitセクション(として)の両方に表示されたファイルに対して、誤って別のgitaddを実行しましたmodified。git diffを実行するつもりでしたが、スリップして再度追加したので、(私が知っている)diffを実行する方法がありません。

質問:

最後のステージング操作だけを元に戻す方法はありますか?以前に追加されたバージョンが引き続き/再びインデックスに含まれ、変更されたファイルが再び作業ツリーに含まれるため、差分をとることができますか?

私がこの小さな開発ラウンドを終えたときにすべてを一緒にコミットすることが目標であるため、これはコミットされていません。私は、gitが通常、コミットされる前に新しいファイルへの変更を表示できるのが本当に好きです...しかし...私はそのチャンスを逃しました、そして今それを取り戻す方法があるかどうか疑問に思っています。?

私がこれまで調べてきたことは、最後のコミット(ファイルなし)またはファイルの現在の状態(とにかく私が持っている)に戻ることができるようですが、前のコミットに行く間の中間ではありませんインデックスからのバージョン、それはコミットの一部ではありませんでした。これが可能かどうかについてのヒント(不可能であるという確かな答えでさえ、できればこれが当てはまる理由の説明とともに)をいただければ幸いです。

4

1 に答える 1

3

ファイルの最後のステージングされたバージョンに到達する直接的な方法はありません。インデックスファイルのバージョン管理はありません。これは、commitを使用するために使用することになっています。将来的には、一時的なコミットをより頻繁に行うことを検討できます(たとえば、 )。commit --amendそうすれば、少なくとも以前のバージョンがreflogに含まれるようになります(たとえばgit log -g)。

ただし、すべてのファイルのすべてのステージングされたバージョンがgitオブジェクトデータベースに追加されます。でそれらを見つけることができるはずですgit fsck --lost-found。これにより、すべての「ぶら下がっている」ブロブがに書き出され.git/lost-found/otherます。残念ながら、それらは特定の順序になっていないか、元のファイル名を持っていませんが、失われたブロブはどこかにあるはずです。

于 2012-05-27T11:06:10.027 に答える