私は次のシナリオを持っています:
1と3のファイルは、マイナーな変更を加えてほとんど同じですが、何度か繰り返したため、まったく新しいファイルを作成し、古いファイルを削除することになりました。ファイル1のgit履歴をファイル3に保存/移動する方法はありますか?
私が考えることができる1つのアプローチは、古いファイルを削除したコミットに戻ってから、
git mv src / GetData.cs src / Get / GetData.cs
それを新しいフォルダに移動しますが、その間に他の多くのコミットと変更があったので、これを避けたいと思います。
前もって感謝します。
Gitにはファイル履歴がありません。保存または復元するものはありません。
Gitにはコミットがあり、コミットは履歴です。それだけです—それがあなたが持っているすべてです。コミットを追加して、履歴を追加します。
さて、コミットにファイルが含まれているのは事実です。Gitにコミット履歴をウォークスルーするように依頼できますが、特定のコミット、つまり特定のファイルに名前でアクセスするコミットのみをリストします。これを行うと、名前が時間の経過とともに変更されたファイルですぐに問題が発生します。
これは、あるファイルが「同じ」ファイルであるという意味になります。これは哲学的な問題であり、良い答えがないことを意味します。:-)これの極端な例として、私の祖父の斧のパラドックスを考えてみましょう。私の父が頭を交換し、私がハンドルを交換しましたが、これは私の祖父の斧です。またはより一般的には、テセウスの船。
あなたが追加した場合:Gitリポジトリの答えはある--follow
にgit log
あなたがそれを告げているにコマンドすべてのことは、ファイルI名を変更しないコミット(出力目的への上場のために)スキップし、Gitはファイルがされているようだコミットを見ていきます、削除、および持っている他のいくつかの名前のファイルが存在し、親にコミットするかどうかを調べる類似十分なコンテンツにする呼び出す「同じファイル」それは。マージコミットではない単一のコミットホップ全体でコンテンツが100%同一である場合、Gitは常にこのファイルを(そして非常に迅速に)見つけます。他の場合では、あなたはあなたのチャンスを取ります。Gitが名前が変更されたことを検出した場合、Gitは続行しますgit log
1つのファイルを変更したコミットを探していますが、以前の名前で保存されているファイルを変更したコミットを探しています。
Gitの他の答えは次のとおりです:なぜあなたは気にしますか?各スナップショットは、状態全体を完全に保持します。コミット1またはコミット7をチェックアウトする場合、なぜsrc/GetData.cs
「同じ」ファイルであるかどうかを気にするのsrc/Get/GetData.cs
ですか?スナップショットに永久に(または少なくともコミットが履歴に存在する限り)保存される正しい名前で正しいファイルの内容が保持されます。
(オペレーティングシステムのファイルIDの概念に関係して、気にする理由がある場合があります。Gitはそれらを気にしません。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加