2017-05-12 8 views
1

gitの名前を変更していくつかのファイルを変更したので、gitは削除して追加して表示しています。gitの名前をrenameとしてポストするファイル

リベース操作などの名前変更としてコミット後にファイルをマークすることはできますか?

私たちの歴史を修正するといいですか?

+1

内部的に、Gitは名前の変更を追跡しません。それは常に "ここで200行を削除し、そこに200行追加する"です。名前の変更を認識して表示するのは出力だけです。 –

+0

これを行う唯一の方法は、変更されたコミットを分割することと、ファイルの名前を変更して2つのうちの1つ、つまりファイルを移動することです。コミットを名前変更/移動を行う1つのコミットに分割し、もう1つは内容を変更します。 –

答えて

2

いいえ、実際に名前を変更/移動したファイルを実際にgitでマークする方法がないため、事実の後に名前を変更/移動したファイルをマークすることはできません。

内部的にリポジトリ内で、名前の変更や移動はまったく追跡されません。

代わりに、ツールのgitリポジトリの上部に、つまり、 git実行可能ファイルとそのすべての兄弟実行ファイルは、この重い持ち上げをしています。

特に、ファイルが追加されたとき、gitのコマンドのいくつかはコミットの残りの部分を見て、削除された別のファイルなどそのファイルのソースを見つけることができるかどうかを調べます。 Gitは内容が同じではないファイルにマッチさせようとしますが、どこかで停止しなければなりません。

これは、同じコミット内のファイルに対して行った変更が、このような移動/名前変更ログ出力の候補とみなすこの「類似ファイルの検索」アルゴリズムでは広すぎることを意味します。

基本的に唯一の選択肢は、ファイルを移動/名前変更したり、同じコミットではなく、2つ(またはそれ以上)の別のコミットに分割してやり直してやり直すことです。

だから、例えば、あなたのコミット履歴は次のように見える場合:

Commit #1: Introduce some files 
Commit #2: Move and change said files 
Commit #3: Further change the moved files 

あなたがこの中にそれを分割します:

Commit #1: Introduce some files 
Commit #2: Move files 
Commit #3: Change said files 
Commit #4: Further change the moved files 

これは/名前の変更を見ることがGitのツールができるようにする必要があります適切に動く。

また、ファイルに対して行った変更の量を減らすことで分割を試みることもできますが、しきい値を超えているだけです。移動/名前変更またはを変更するだけで、同じコミットで両方を変更するのではなく、不一致の可能性を0にする方がよいでしょう。

関連する問題