Eclipse EGitメモ、その2 マージの方法

2018年7月26日

マージの方法について述べる。

カレントを「マージされる側」にする

例えば、masterからのブランチsampleで作業し、そこでの修正内容をコミットしたとする。うまく行ったのでmasterにマージしたいとする。

しかし、カレントのブランチをmasterに変更しないとマージはできないようだ。gitの仕組みが良くわかってないのだが、少なくともEGitでやる限りは動作しないようだ。

つまり、カレントを「マージされて変更される側」にしないといけない。おそらくはマージすると、衝突(conflict)が起こる可能性もあるので、そのときに対応できるようにするためだろう。

この件についての追加

結論から言えばEGitではできないようなのだが、gitにはFast-Forwardマージというものがある。ブランチAからブランチBを作成し、BでコミットするあいだAにはコミットが無いものとし、その後Bの内容をAにマージしたいときは、単純にAのHeadを動かせばよい(Fast-Forward)。マージ(混ぜる)必要も無いということのようだ。

EGitでカレントがBのままAのFast-Forwardができないものか調べたのだが、そのようなものが見つからなかった。

変更の確認

その前に変更を確認してみる。該当するsampleのコミットをクリックすると、右下に変更されたファイルが表示される。右上の右から二番目のボタンをクリックして「Compare Mode」にする。

この状態で変更ファイルをダブルクリックして表示すると。その前の状態との比較表示がされる。

※先のCompare ModeがOFFの場合は、ファイル全体が表示されるだけで、前状態との比較はされない。

マージできないところでマージ操作をする

マージするには、マージするコミットを右クリックし、Mergeを選択すれば良いのだが、マージできない場所でこの操作を行っても何も起こらない。例えば、masterのコミット自体を右クリックし、Mergeを選択してみる。

すると「Already up-to-date」などという表示になり、何も起こらない。

マージを行ってみる

マージしたいのはsampleの先頭なので、これを右クリックしてMergeを選択する。

すると、以下のようになり、masterにマージされたことがわかる。

他のマージ方法

上記はコミット履歴からマージする方法なのだが、プロジェクトを右クリックしてもマージを行うことができる。

出てくるダイアログにおいてsampleを選択してMergeを押す。