こんにちは。キャスレーコンサルティングのSI(システム・インテグレーション)部の長岡です。

今回はGit 初心者の私がEclipse 用の Git プラグイン「EGit」に入門してみて学んだ内容から、最低限おさえておきたい操作をいくつか紹介します。

なお、git でよく使う操作はだいたい EGit でできますが、git コマンドを使わないと出来ないことがどうしても出てくるので、バージョンアップで対応される事を待ちましょう。
Git と Subversionの連携や、別リポジトリへのリファクタリグのgit コマンドは覚えておくと便利です。
※詳細についてはこちらのブログ「Git 初心者による Gitを使ったリファクタリング操作」を参照

環境は以下で試しています。
OS:Windows10
Eclipse:4.3
EGit:3.2
リポジトリにはGitHubを利用しています。

EGitの導入方法

EGit は Eclipse 用の Git プラグインです。

EGitは、すごく古いEclipseでなければ初期状態で導入されていますが、導入されていない場合や最新版を導入したい場合は、以下の手順でご用意ください。
※2016/06/26時点での最新ver 4.4.0

ヘルプ->新規ソフトウェアのインストールに、作業対象に以下のURLを指定し、対象のコンポーネントを選択してインストールします。
http://download.eclipse.org/egit/updates
egit_01

なお、EGit は Java の Git 実装である JGit を使って動きますので、別途 Git のコマンドラインツールなどを入れる必要はありません。

初期設定

ウィンドウ->設定->チーム->Gitの項目を適宜設定します。
egit_02

Egit 操作

リモートリポジトリからプロジェクトを取得

Gitに上げたプロジェクトをEclipseに取り込みます。
Gitではcloneすると言います。
ウィンドウ->パースペクティブを開く->その他->Gitを選択します。
egit_03

開かれた画面より、Gitリポジトリ―の複製->Clone URIを選択し、「次へ」を押下します。
egit_04
egit_05

取得するリポジトリを指定します。GitHubの場合、Webでコピー出来るurlをURL欄にコピーします。
Protocol欄にSSHを選択します。
URI欄がSSHにあわせて変更されますが、そのままで構いません。
認証情報を入力し、「次へ」を押下します。
egit_06

取得するブランチを選択し、「次へ」を押下します。
egit_07

ローカルの保管場所を設定し、「完了」を押下します。
egit_08

これでEclipseにプロジェクトをcloneすることが出来ました。
egit_09

gitコマンドの場合

$ git clone <url></span>

ローカルリポジトリへのcommit

ファイルを追加、更新した後、ローカルリポジトリにcommitします。
egit_10

右クリック->チーム->コミットを選択します。
egit_11

コミットダイアログが表示されるので、コミット・メッセージを入力し、コミットするファイルを選択して、「コミット」ボタンを押下します。
egit_12

これでローカルリポジトリのコミットが完了しました。
リモートリポジトリに対してpushしていないコミットがあるので↑が表示されます。
egit_13

gitコマンドの場合

$ git add <filepattern>
$ git commit

リモートリポジトリにpushする

ローカルリポジトリにcommitしたらリモートリポジトリに反映させるためにpushする必要があります。
右クリック->チーム->PushBranchを選択します
egit_14

表示された画面に従って、「次へ」-「完了」を押下します。
egit_15

egit_16

これで完了です。

gitコマンドの場合

$ git push <remote> <branch>

歴史を戻る

push前であればリポジトリの状態を前に戻すことが出来ます。
右クリック->チーム->ヒストリーに表示を選択します
egit_17

egit_18

表示されたヒストリーから2つ前のコミットの状態に戻したいと思います。
2つ前のコミットを選択し、右クリック->リセット->ハードを選択します。
※リセットのオプションには、ソフト、混合、ハードがあり、影響度の小さい順に以下のようになる。

  • ソフト:HEAD の位置のみを変更する。インデックス、ワーキングツリーには影響なし。
  • 混合:HEAD の位置とインデックスを変更する。ワーキングツリーには影響なし。
  • ハード:HEADの位置、インデックス、ワーキングツリーをすべて変更する。

egit_19

確認画面が表示されるので、「はい」を押下します。
egit_20

これで前の状態に戻すことが出来ました。
egit_21

gitコマンドの場合

$ git reset --hard <commit>

コンフリクトの解消

マージやプル操作などで、ソースに衝突が発生した場合は、次の手順でマージを行います。

master からブランチした developローカルブランチで作業中に、起点とした master に別な修正がかかりコンフリクトした例です。

developをmasterとマージします。
egit_22

egit_23

別の修正があった為、README.mdがコンフリクト(競合)しました。
egit_24

該当のファイルには赤印がつきます。
egit_25

対象のファイルを選択し、右クリック->チーム->マージ・ツールを選択する。
egit_26

マージツールで差分を確認し、正しい状態にマージする。
egit_27

対象のファイルを右クリック->チーム->索引に追加を選択し、インデックスに戻してあげると、プロジェクトのマーカーが [競合]から[マージ済み]に変わります。
egit_28

egit_29

コミットを行って完了です。
egit_30

gitコマンドの場合

$ git merge --no-ff <branch>
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
-----------------
viコマンドや、エディタ等でコンフリクト部分を確認し解消する。
-----------------
$ git commit -am "任意のコメント"

コミットメッセージを修正

コミットした直前のコミットコメントは修正できます。
egit_31

修正をかけない状態で再びコミットを行うと、「コミットするファイルがありません」のダイアログが表示されるので、「はい」を押下します。
egit_32

コミットダイアログが表示されるので、コミットメッセージを修正し、「コミット」を押下すると直前のコミットコメントが修正されます。
egit_33

egit_34

gitコマンドの場合

$ git commit --amend
-----------------
上記コマンドを実行するとエディタが立ち上がるので内容を編集します。
-----------------

特定のコミットのみを適用する

任意のブランチのコミットを適用することが出来ます。

ヒストリーを表示させ、右上にある「すべてのブランチおよびタグegit_35」を表示ONにします。
egit_36

これで他のブランチの履歴も表示されるので、対象のコミットを選択します。
今回はId:3111a18のコミットを適用します。

対象を選択し、右クリック->Cherry Pickを選択します
egit_37

確認画面が表示されるので、「OK」を押下します。
egit_39

これで対象のコミット情報だけ取り込み完了です。
egit_38

gitコマンドの場合

$ git cherry-pick <commit>

まとめ

今回紹介したのはEGit の機能の一部です。
EGit では上記で紹介した内容以外にもたくさんの機能があるようなので、試してみて下さい。
合わせてGit コマンドも覚えると理解が深まると思います。

参考資料