2012-01-12 3 views
11

現在、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つのコミットがあります。私は他のいくつかのマージ技術を使って遊んでいました。このテクニックは無視してください。

答えて

-4

gitを使ってコミットすることができます。これはうまくいきます。

+0

はいてください。私はそれを知っている。しかし、ツールの使い方やマージの競合を通して、私がgitにコミットするべきものに関するヒントや警告を与えるための最良の方法は何でしょうか。 – LiKao

0

残念ながら、私のコードで同じトラップになってしまいました。gitでファイルを移動した後、ブランチマージ中の変更を認識しません。 に思える、黄金のルール1は、移動での作業案内する必要がある。

キープコードの動きが変化

から分離GITは、今のように、このようなケースを追跡することはできません。ファイルが移動してからマージすると潜在的な問題を突き止めるための迅速かつ自動化されたソリューションはないようです。

あなたは問題が起こったの両方のコミットを知っているよ、とパッチを適用したり、移動が+マージ後に失われた変更を元に戻すしようとする場合でも、あなたはまだ同様のgitから拒否得られます。

'git apply' failed with code 1:'error: patch failed: filename.js:81' 
関連する問題