MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

困った時の逆引きGitメモ(JetBrains IDE編)


やりたいことが今すぐわかる 逆引きGit入門

目次

はじめに

以前、困った時の逆引きGitメモの

コマンドライン編を書きましたが、

myenigma.hatenablog.com

今回はPyCharmやClion, InteliJで有名な

JetbrainsのIDEを使った場合のGit逆引きメモです。

myenigma.hatenablog.com

 

IDEのGit用のGUIを使うことで、

インタラクティブにGitのヒストリーを整理したり、

様々なブランチやリモートに対する差分管理がしやすくなります。

 

JetBrainsのIDEに関しては、前述の記事や、

下記の記事を参照ください。

samuraism.com

www.jetbrains.com

 

Gitそのものに関しては、下記を参照ください。

myenigma.hatenablog.com

myenigma.hatenablog.com

www.jetbrains.com

pleiades.io

前回コミットした時の状態に戻す

ファイルブラウザから、該当のファイルを右クリックして、

Git->revertで、最終コミットまで戻して、変更を廃棄できます。

f:id:meison_amsl:20191013194645p:plain

 

複数のファイルが変更されている場合は、

元に戻したいファイルのみを選んで、revertすることができます。

f:id:meison_amsl:20191013194720p:plain

 

直前のコミットをなかったコトにする

Version Control -> Log で、直前のコミットの一つ前のコミットを

右クリックして、Ret current branch to hereを押します。

f:id:meison_amsl:20191013195016p:plain

 

すると下記のように、4つのResetモードを選ぶ画面が出てくるので、

いずれかを選択して、Retすれば直前のコミットをなかったことにできます。

f:id:meison_amsl:20191013195311p:plain

 

4つのモードはそれぞれ

  • Soft: コミットは無かったことにするが、現在のファイルはそのままで、変更ファイルはstagingされた状態になります。(取り消したコミットで追加されたファイルはaddされた状態になる)

  • Mixed: コミットは無かったことし、現在のファイルはそのままで、変更ファイルはstaginsされない。(取り消したコミットで追加されたファイルは再度addが必要)

  • Hard: コミットも取り消し、ファイルも指定したコミットまで戻す。コミットしていないローカルの変更も削除される

  • Keep: コミットも取り消し、ファイルも指定したコミットまで戻す。コミットしていないローカルの変更はそのまま保持される。

 

無理やりリモートリポジトリにローカルを合わせる

なんか変なことしてパニックになった時に、

とりあえずリモートリポジトリと同じにしたい場合は、

まず、VCS -> Git -> Fetchしたあと、

f:id:meison_amsl:20191013203844p:plain

VCS -> Git -> Reset HEADを選び

f:id:meison_amsl:20191013204031p:plain

下記のように、Reset TypeをHardにして、

To CommitをHEADから、origin/masterなど、

参照したいリモートリポジトリとブランチを指定して、Resetすれば、

参照先の状態と同じにすることができます。

f:id:meison_amsl:20191013204152p:plain

 

更新されたファイルの一覧を表示する

Version Control -> Local ChangesのDefault Changelistを見れば、

変更したファイルのリストの一覧を見ることができます。

f:id:meison_amsl:20191013204947p:plain

 

Pushする前に、あるコミットメッセージを変更する

Pushする前であれば、Version Controlタブ->logの修正したいコミットを右クリックして、

Rewordすれば、コミットメッセージを変更することができます。

f:id:meison_amsl:20191013202834p:plain

 

複数のコミットをまとめる

コードレビューのための時など、不要なコミットを削除したい場合は、

元となる一番古いコミットをlogタブで右クリックして、

Interactive Rebaseを選びます。

そして、下記のように必要なコミットだけpickして、

残りをskipすれば、skipしたコミットは無視されます。

f:id:meison_amsl:20190928202253p:plain

 

以前のコミットを分割する

過去にしたコミットを、分割したい場合にも、

Interactive Rebaseが便利です。

例えば、複数のファイルを一度にコミットしてしまい、

あとから、それぞれのファイルを別々のコミットにしたい時に、

それぞれのコミットに分割できます。

 

具体的には、

まずVersion Control -> logから、

分割したいコミットを右クリックしてInteractive Rebaseします。

f:id:meison_amsl:20191012111433p:plain

 

続いて、分割したいコミットをeditにして、

start rebasingを押します。

f:id:meison_amsl:20191012111540p:plain

 

すると、IDEの右下に下記のような表示がでます。

これはRebasingをしている最中のモードです。

f:id:meison_amsl:20191012111709p:plain

 

続いて、Version Control -> logから、

分割したいコミットの一つ前のコミットを右クリックして、

Reset current branch to hereを選びます。

Resetのモードが選択できますが、分割したい場合はMixedでOKです。

これで、一旦分割したいコミットを無かったことにできます。

f:id:meison_amsl:20191012112224p:plain

 

あとは、そのコミットのファイルがUnstaged状態なので、

それぞれのファイル用のコミットを複数回実施します。

あとは、先程の右下のポップアップのcontinueを押せば、

コミットが分割できます。

 

他のブランチの、ある特定のコミットのみをマージする。

別のブランチのあるコミット(その前のコミットは不要)だけをmergeしたい場合は、

cherry-pickを利用します。

 

JetBrains IDEでは、Version Control -> logから、

マージしたいコミットを右クリックで選んで、

Cherry pickを選ぶと、そのコミットが現在のブランチにマージされます。

f:id:meison_amsl:20191012121454p:plain

 

コマンドラインではできて、IDEからはできないこと

色々調べてみましたが、現時点でコマンドラインからは可能ですが、

JetBrains IDEからは不可能な事柄がいくつかあるようです。

その場合は、コマンドラインが実施する必要があります。

  • 空のコミットを作る

  • git cleanコマンドの実行

  • リビジョン番号を指定してリモートリポジトリにpush

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com