こんにちは。キャスレーコンサルティングの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 は Java の Git 実装である JGit を使って動きますので、別途 Git のコマンドラインツールなどを入れる必要はありません。
初期設定
ウィンドウ->設定->チーム->Gitの項目を適宜設定します。
Egit 操作
リモートリポジトリからプロジェクトを取得
Gitに上げたプロジェクトをEclipseに取り込みます。
Gitではcloneすると言います。
ウィンドウ->パースペクティブを開く->その他->Gitを選択します。
開かれた画面より、Gitリポジトリ―の複製->Clone URIを選択し、「次へ」を押下します。
取得するリポジトリを指定します。GitHubの場合、Webでコピー出来るurlをURL欄にコピーします。
Protocol欄にSSHを選択します。
URI欄がSSHにあわせて変更されますが、そのままで構いません。
認証情報を入力し、「次へ」を押下します。
取得するブランチを選択し、「次へ」を押下します。
ローカルの保管場所を設定し、「完了」を押下します。
これでEclipseにプロジェクトをcloneすることが出来ました。
gitコマンドの場合
$ git clone <url></span>
ローカルリポジトリへのcommit
ファイルを追加、更新した後、ローカルリポジトリにcommitします。
右クリック->チーム->コミットを選択します。
コミットダイアログが表示されるので、コミット・メッセージを入力し、コミットするファイルを選択して、「コミット」ボタンを押下します。
これでローカルリポジトリのコミットが完了しました。
リモートリポジトリに対してpushしていないコミットがあるので↑が表示されます。
gitコマンドの場合
$ git add <filepattern> $ git commit
リモートリポジトリにpushする
ローカルリポジトリにcommitしたらリモートリポジトリに反映させるためにpushする必要があります。
右クリック->チーム->PushBranchを選択します
表示された画面に従って、「次へ」-「完了」を押下します。
これで完了です。
gitコマンドの場合
$ git push <remote> <branch>
歴史を戻る
push前であればリポジトリの状態を前に戻すことが出来ます。
右クリック->チーム->ヒストリーに表示を選択します
表示されたヒストリーから2つ前のコミットの状態に戻したいと思います。
2つ前のコミットを選択し、右クリック->リセット->ハードを選択します。
※リセットのオプションには、ソフト、混合、ハードがあり、影響度の小さい順に以下のようになる。
- ソフト:HEAD の位置のみを変更する。インデックス、ワーキングツリーには影響なし。
- 混合:HEAD の位置とインデックスを変更する。ワーキングツリーには影響なし。
- ハード:HEADの位置、インデックス、ワーキングツリーをすべて変更する。
確認画面が表示されるので、「はい」を押下します。
これで前の状態に戻すことが出来ました。
gitコマンドの場合
$ git reset --hard <commit>
コンフリクトの解消
マージやプル操作などで、ソースに衝突が発生した場合は、次の手順でマージを行います。
master からブランチした developローカルブランチで作業中に、起点とした master に別な修正がかかりコンフリクトした例です。
developをmasterとマージします。
別の修正があった為、README.mdがコンフリクト(競合)しました。
該当のファイルには赤印がつきます。
対象のファイルを選択し、右クリック->チーム->マージ・ツールを選択する。
マージツールで差分を確認し、正しい状態にマージする。
対象のファイルを右クリック->チーム->索引に追加を選択し、インデックスに戻してあげると、プロジェクトのマーカーが [競合]から[マージ済み]に変わります。
コミットを行って完了です。
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 "任意のコメント"
コミットメッセージを修正
コミットした直前のコミットコメントは修正できます。
修正をかけない状態で再びコミットを行うと、「コミットするファイルがありません」のダイアログが表示されるので、「はい」を押下します。
コミットダイアログが表示されるので、コミットメッセージを修正し、「コミット」を押下すると直前のコミットコメントが修正されます。
gitコマンドの場合
$ git commit --amend ----------------- 上記コマンドを実行するとエディタが立ち上がるので内容を編集します。 -----------------
特定のコミットのみを適用する
任意のブランチのコミットを適用することが出来ます。
ヒストリーを表示させ、右上にある「すべてのブランチおよびタグ」を表示ONにします。
これで他のブランチの履歴も表示されるので、対象のコミットを選択します。
今回はId:3111a18のコミットを適用します。
対象を選択し、右クリック->Cherry Pickを選択します
確認画面が表示されるので、「OK」を押下します。
これで対象のコミット情報だけ取り込み完了です。
gitコマンドの場合
$ git cherry-pick <commit>
まとめ
今回紹介したのはEGit の機能の一部です。
EGit では上記で紹介した内容以外にもたくさんの機能があるようなので、試してみて下さい。
合わせてGit コマンドも覚えると理解が深まると思います。