14

2 つのクラスの機能を 1 つに結合する必要がありますが、それらの変更履歴も結合できるのでしょうか?

どちらのクラスにも以前の変更が多数含まれているため、参照用に変更履歴を 1 か所に保管したいと考えています。結合されたクラスではコメントを作成できますが、IDE では、削除されたファイルの履歴を取得するのは簡単ではありません。

4

1 に答える 1

21

これを行うには、ファイルのマージをマージ変更セットとして記録する必要があります。

変更セット 0 が、ファイル C にマージしたいファイル A と B の現在のヘッドであるとします。これを行うには、ファイル A の名前を C に変更し、変更セット 1 としてコミットしてから、更新を変更セット 0 に戻し、ファイル B の名前を C に変更し、これを変更セット 2 としてコミットします。次に、これら 2 つの変更セットをマージし、それらの内容を結合して、残りのファイル A と B を削除します。これにより、C のファイル履歴が A と B の両方の子孫として登録されます。最後に、ファイル C の名前を変更できます。 Aに戻ります。

結果のツリーは次のようになります。

0 [A, B] --- 1 [A, C] \
          \            \
           \ 2 [C, B] --- 3 [C] --- 4 [A] 

コマンド ライン フローの例:

$ hg init
$ echo a > a
$ echo b > b
$ hg add a b
$ hg commit -m "add files a and b"
$ hg mv a c
$ hg commit -m "rename a to c"
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg mv b c
$ hg commit -m "rename b to c"
created new head
$ hg merge
merging c
warning: conflicts during merge.
merging c incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 1 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
$ ls
c      c.orig
$ cat c
<<<<<<< local
b
=======
a
>>>>>>> other
$ echo ab > c
$ hg resolve --mark c
$ hg commit -m "merge a and b into c"
$ hg mv c a
$ hg commit -m "rename c back to a"

ここで入力hg log -f aすると、両方のファイルの履歴が表示されることがわかります。

于 2012-05-23T11:49:06.357 に答える