私のプロジェクトには、foo
私が使用してチェックインしているファイルがありますgit
。ファイルがまったく必要なくなるように、リファクタリングを実行しました。私がそうgit rm foo
する場合、ファイルは古いコミットにまだ存在しますか?古いコミットをチェックアウトしてファイルを操作することはできますか?
3 に答える
いいえ、git rm
(およびコミット)は、ファイルが存在しなくなったことを反映する新しいツリーを書き込みます。作成、変更、最終的な削除を含むファイルの全履歴が履歴に表示されます。
いいえ、git rm
作業ディレクトリからファイルを削除し、その削除をインデックスに追加するだけです。したがって、将来のコミットのみが影響を受けます。以前のコミットはすべて同じままで、リポジトリからファイルを削除したときに履歴が実際に表示されます。
一般に、以前に行ったすべてのコミットは永続的であるため、コミットが履歴のどこかにあると、コミットが失われることを心配する必要はありません。もちろん、以前のコミットを削除または変更できるもの(リベースなど)がいくつかありますが、ほとんどの場合、かなり安全です。
現在削除されているファイルを含め、すべての状態が属する既知のコミットIDを使用して、古いバージョンをチェックアウトできます。たとえば、git branch <branchname> <start-point>を参照してください。ここで、start-pointはコミットIDです。開始点が現在のブランチに属していることを追跡するべきではありません。コミットIDは一意である必要があるため、現在のリポジトリで認識されている任意のブランチに含めることができます。
logコマンドを使用して、ファイルの以前の履歴を確認できます。ただし、どの構文でも機能しません。1.7.7の場合、パスとリビジョンを区別できないため、単純な「gitlogoldpath」ではなく「gitlog--oldpath」を発行します。「非難」としての他のいくつかのコマンドについては、これでも十分ではありません。古いリビジョンをチェックアウトして開始する必要があります。