現在、gitの多くのコンテンツトラッキング機能について検討しています。 gitを使ってあるファイルから別のファイルに移動したコードを見つけることができますが、マージで競合解消を実行する際にこの機能をどのように使用できるのか不思議です。ここで移動したコンテンツ(ファイルだけでなく)を正確にマージする方法
はシナリオです:
私は2つのファイルhello.cc
と作成bye.cc
を持っています。私は支店topic
を開始し、いくつかのコードをhello.cc
からbye.cc
に移動します。今私がgit blame -C bye.cc
を行うと、このコードはもともと知りたかったhello.cc
から来たことがわかります。しかし、今では、移動したコンテンツを持たない元のブランチに切り替えて、hello.cc
のセクション内のコードを変更して、もう一方のコミットで移動しました。私が今git merge topic
を実行した場合、私はhello.cc
のために競合します。しかし、diff3スタイルを使用していない限り、私はこのメソッドは他のブランチのhello.cc
から削除されていますが、後で変更されているわけではありません。他のブランチからの変更がコードに再適用される必要があるかどうかを確認する必要があるため、bye.cc
で競合が発生することもあります。これは何とか可能ですか?
私は手作業で調べることができますが、コードはgit blame --reverse -C topic...
を実行して移動されていることがわかります。しかし、1つは、この可能性を理解するのにかなり時間がかかっていて、他のほとんどの人はおそらくそれについて知りません。二番目に私は怠惰で、おそらくコードが動かされたかもしれないことを忘れてしまうでしょう。また、コードが複数のファイルに移動したときに、これが機能するかどうかはわかりません。
このような状況をできるだけ安全に保つ方法はありますか?
編集:
私はちょうどgit blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
もコンテンツが移動場所を見つけるために働くことが分かりました。私がgitを正しく理解していれば、完全なリポジトリ内のコンテンツを完全に検索することはないため、これはおそらく速いでしょう。
編集:
私は私があなた自身のためのマージを試してみることができますgithubに遊んのために使用していますリポジトリをアップロードしました。私が関数を移動したコミットは、トピックブランチにあります。ブランチmerge_here
のHEADでマスタで同じ関数が変更されるコミット。マスターにはもう1つのコミットがあります。私は他のいくつかのマージ技術を使って遊んでいました。このテクニックは無視してください。
はいてください。私はそれを知っている。しかし、ツールの使い方やマージの競合を通して、私がgitにコミットするべきものに関するヒントや警告を与えるための最良の方法は何でしょうか。 – LiKao