LoginSignup
5
4

More than 5 years have passed since last update.

RubyMineでのGit操作「現在の作業を一時的に退避したい」

Last updated at Posted at 2016-01-24

想定環境

  • Mac OS X 10.11
  • RubyMine 8.0.3

プロジェクトディレクトリは次のパス。

/Users/kyoshida/RubymineProjects/eslplayer

課題

トピックブランチで作業している時に別のブランチで作業する必要があり、現在の変更内容をいったん保存したい、といったケース。

例えば feature/paginate ブランチで作業していて、別の開発者から「自分の作業している feature/oauth ブランチを見てほしい」と相談された場合を想定する。この場合、例えば次の3つの方法が考えられる。

  • Subversion 方式
    1. feature/paginate ブランチでパッチを作成
    2. feature/oauth ブランチで作業を完了後
    3. feature/paginate ブランチに戻る
    4. パッチをあてる
  • rebase
    1. feature/paginate ブランチで一時的にコミット
    2. feature/oauth ブランチで作業を完了後
    3. feature/paginate ブランチに戻る
    4. 残りを実装後
    5. rebase
  • バージョン管理機能を使わない
    1. 編集したファイルを適当な場所に退避する
    2. revert
    3. feature/oauth ブランチで作業を完了後
    4. feature/paginate ブランチに戻る
    5. 退避したファイルを戻す

最後の方法はファイル数が少なければ出来ないこともないが、作業ミスの可能性が高くなる。Git にはこの方法に似た機能として stash があるので、これを利用する。

VCS -> Git -> Stash Changes... メニューを選択する。
stash1.png

ダイアログが表示されるので、Message 欄に適当なメモを入力(任意)して、Create Stash ボタンをクリックする。これで、内容が直前にコミットした状態に戻る。編集した内容は退避されている。
stash2.png

リモートリポジトリの最新の状態を取得するため、VCS -> Git -> Fetch メニューを選択する。
stash4.png

ブランチ切り替えで、新たな作業対象の feature/oauth ブランチをクリックし、Checkout as new local branch でローカルにチェックアウトする。
stash3.png

feature/oauth ブランチで作業を完了後、元の作業ブランチに戻る。
stash5.png

中断した作業内容が消えているので戻す。まずは VCS -> Git -> UnStash Changes... メニューを選択する。
stash6.png

次にダイアログで対象の stash(変更)を選択し、Pop stash にチェックを入れたあと、Pop Stash ボタンをクリックすると中断して退避した作業内容が復活する。
stash8.png

Pop stash は復活させたあと、その stash が削除される。残しておきたい場合はチェックしない。(@jnchito さん、情報ありがとうございます)

上記の図では Stashes 欄に複数の stash が表示されているが、これは過去に登録したもの。一番下が古く、一番上が新しい(スタック)。

UnStash Changes ダイアログの View では選択している stash の内容が確認できる。また、Drop では選択している stash を削除、Clear ではすべての stash を削除する事ができる。

Console

Version Controll ウインドウの Console タブの出力内容から実際に実行されている git コマンドは次の通り。ただし、各コマンド前にプロジェクトディレクトリに移動しているが、初回以降の表示は省略している。

# プロジェクトディレクトリに移動
cd /Users/kyoshida/RubymineProjects/eslplayer
# stash の登録
git -c core.quotepath=false stash save splitメソッドを実装中
# fetch
git -c core.quotepath=false fetch origin --progress --prune
# checkout
git -c core.quotepath=false checkout -b feature/oauth
# checkout
git -c core.quotepath=false checkout feature/paginate
# stash の復元
git -c core.quotepath=false stash apply stash@{0}

参考

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4