逆引き EGit

# はじめに

逆引き EGit へようこそ！

こちらは「git コマンド使ってもいいんだけど、Eclipse を常用してると git に移るのが面倒」という理由で EGit を使ってる筆者による逆引き形式のメモ書きです。

- 現在 EGit の最新バージョンは 3.7 です
- 次バージョン 4.0 のリリースは2015年6月予定です

なお、git でよく使う操作はだいたい EGit でできますが、git コマンドを使わないと出来ないことが、どーしても出てくるので、そこは諦めましょう。

## 英語でもいいから公式のドキュメントないの？

つ [EGit/User Guide - Eclipsepedia](http://wiki.eclipse.org/EGit/User_Guide)

# コミット前の変更点を捨てたい

Subversion でいう revert。

[Replace With] > [HEAD Revision] すると、ローカルでの変更点を捨てられる。捨てるときに確認ダイアログが出てこないので注意。

変更があったファイル一覧を出して、個別に捨てたい場合は、[Compare With] > [HEAD Revision] して Git Tree Compare を表示してから、個別に捨てるといい。

# コミット済みのファイルをバージョン管理から外す (git rm <file>, gitignore)

[Team] > [Untrack] して [Team] > [Ignore] する。

ファイルの場所によっては EGit では出来ないことがある。その場合はコマンドラインで git rm <file> を使う。この時、手元のファイルも削除されてしまうことに注意。

# Pull したらコンフリクトした

あとでかく

# ブランチを切り替えたい (git checkout <branch>)

[Team] > [Switch To]

# リモートブランチを削除したい (git push origin :<branch>)

1. [Team] > [Remote] > [Push...] でダイアログを開く
2. [Next]
3. Add delete ref specification で Remote ref to delete を指定して、すぐ右にある [Add spec] を押し、[Next]
4. プッシュ予定の内容が表示されるので、確認して Finish！

# マージのコンフリクトを解消する

1. コンフリクトしたファイルを確認する。両方向き矢印 ←→ が付いているファイルがコンフリクトしたファイル。スター * が付いているファイルはコンフリクトしていない。
2. ファイルごとに解決。コンフリクトしたファイルを開いて >>>> やら ==== やらを手がかりに手直しした後、ファイルを右クリックして [Team] > [Add to Index] すれば、他のファイルと同じように * になる。もし元のファイルと同じ内容に戻った場合は * がつかない。いずれにせよ←→は消える。
3. 仕上げ。全てのコンフリクトしたファイルから ←→ が消えたら完全解決まで後一歩。通常のコミット時と同じように [Team] > [Commit] でコミットすれば完了。

# マージコミットを作る (git merge --no-ff)

1. [Team] > [Merge...] でマージの設定を開く
2. マージするブランチを選ぶ
3. "Fast forward options" で "If a fast-forward, create a merge commit" を選んでマージ

* EGit 2.3 以降
* History ビューなどで操作するとできない

# タグを作って共有する (git push --tags)

git では、タグを作って普通にプッシュしても反映されない。明示的にタグをプッシュしないといけない。

1. ヒストリーで、タグを打ちたいコミットを右クリックして [Create Tag...]
2. タグの名前と、タグの説明文を入力して [OK]
3. プロジェクトを右クリックして [Team] > [Remote] > [Push...]
4. リポジトリの URL が合っていることを確認して [Next]
5. 真ん中右の方にある [Add All Tags Spec] をクリックして [Next]
6. タグ追加の結果（予定）が表示されるので、確認して [Finish]

# 昔に帰りたい (git checkout か git reset など)

昔に帰りたいというのは、タイムマシンで昔の様子を見に行って、また現在に戻ってきたいのか、これまでに積み上げた数コミットを捨ててやり直したいのか、どっち？

前者
1. ヒストリーから、該当時点のコミットを選んで右クリックして [Checkout]

後者（捨てたコミットは保険として残るけど、基本的には捨てた扱い）
1. ヒストリーから、該当時点のコミットを選んで、右クリックして [Reset] > [Hard]

# リベースしたい (git rebase master topic)

master ブランチの上に topic ブランチをリベースする場合。

topic ブランチを書いている間に master ブランチが進んでしまったときとかに使う。

topic ブランチに切り替えた状態で、次のどちらかの操作を行う。
1. パッケージエクスプローラから
  a. [Team] > [Rebase...] で Local の master を選んでリベース
1. ヒストリーから
  a. master ブランチを右クリックして [Rebase on Top of]

# コミットをまとめたい (git rebase -i) since 3.2

ヒストリーから対象のコミットを右クリックして [Rebase Interactive]

# プッシュ前のまずいコミットを歴史から消し去りたい (git rebase -i)

直前のコミットであれば EGit でも何とかなるが、そうじゃないと EGit では難しい。おとなしくコンソールで git rebase -i を打ったほうがいい。

直前のコミットの場合…

1. 消し去りたい情報を削除する
2. パッケージエクスプローラから [Team] > [Commit]
3. ダイアログ右上の、三角に矢印がついたボタン (Amend Previous Commit) を押す
4. コミットする

# 改行文字を強制したい (.gitattributes)

対応してない！！！こんなバグレポートが上がっている。

* [Bug 421364 - Reliable line ending management in cross platform Linux/Windows with mixed native CLI & EGit usage](https://bugs.eclipse.org/bugs/show_bug.cgi?id=421364)
* [Bug 342372 - support gitattributes](https://bugs.eclipse.org/bugs/show_bug.cgi?id=342372)

# 非対応

 * [gitattributes](https://bugs.eclipse.org/bugs/show_bug.cgi?id=342372)

# 考え中

特になし

# 番外編

## EGit をバージョンアップする

1. メニューの [Help] > [Install new Software...]
2. 右上の Add ボタンから EGit の更新サイトを登録する
  * Name に EGit
  * Location に http://download.eclipse.org/egit/updates
3. 適当に選んで選んでアップデートする。以下のあたりを選べば大丈夫かも。
  * Eclipse Git Team Provider
    * Eclipse Git Team Provider
  * JGit
    * Java implementation of Git

参考:

* http://www.eclipse.org/egit/download/

## 更新情報を得る

ここからどうぞ＞http://wiki.eclipse.org/EGit/New_and_Noteworthy