Gitでコミットを修正する

Gitでコミットを修正する

git commit --amend -m 'commit message'

コミットメッセージに変更が不要な場合は以下のようにもできる

git commit --amend -C HEAD^

直前のコミットのメッセージで修正する

git stashでもっと小回りの効いた開発をする

一つの作業中に別の変更作業が発生した時、現在の作業を一旦終わらせるか、現在のブランチからブランチを切ってそちらにコミットするということをしていないか。

この前しったばかりなんだがgit stashというのがあって、これを使えば画期的な方法で変更内容を一時的に保存することができる。GitのGUI管理ツールの先頭にボタンがあったのにスルーして使ってなかったので調べて書いておく。

git stashの使い方

現在の変更を保存

git stash

変更を復元

git stash pop

git stash popは最新の退避データを復元するが、いくつも退避データを保存している場合は中から欲しいデータを取り出すこともできるようだ。そのためにはどの退避データから復元したいかをgit stash listで確認する。

$ git stash list
stash@{0}: WIP on master: e1c6d03 add .ideavimrc
stash@{1}: WIP on master: e1c6d03 add .ideavimrc

add .ideavimrcというのは作業ファイル時にチェックアウトしたところのコミットメッセージだな。重要なのは一番左のstash@{0}とかいうところ、これを使って指定したものを復元できる。

git stash pop stash@{0}

保存したデータは残るので使わずに残っているものはこのように削除

git stash drop

後ろに引数で作業ファイルを指定して削除もできる

実際の使用例

新規ファイルでaddされていないファイルにgit stashは使えない

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
testfile.txt
nothing added to commit but untracked files present (use "git add" to track)

git stashを実行してもローカルの変更は保存できませんでしたと出る

$ git stash
No local changes to save

git addで新規ファイルをaddする

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:   testfile.txt

git statusすると変更がなくなった

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

そしてこのように保存が確認できた

$ git stash list
stash@{0}: WIP on master: e1c6d03 add .ideavimrc

UNIXでfindの条件に時間を使う

最近アクセスされたファイル一覧

ユーザーディレクトリ内の1分以内に読み込まれたファイルを一覧にできる。ファイル読み込みに付随した処理を行う時、また自分がなんのファイルを閲覧したのかを抽出したい時はこれ。

find ~/ -type f -amin 1

最近変更されたファイルの一覧

1分以内に修正されたファイルを一覧にできる。変更のあったファイルのみをアップロードしたい時とか、自分の変更の加えたファイルの一覧取得に使える。

find ~/ -type f -cmin 1

IntellijのVimを.ideavimrcでカスタマイズする

IntellijでもVimキーバインドが利用できる。Vimmerの私でもIntellijが使えるのはかなり再現度の高いVimキーバインドがあるおかげだ。

Intellijインストール時に最初にIdeaVim入れます? みたいなこと聞かれるんで、そん時に入れれば再現できるんだが、デフォルトでは検索してもハイライトされなかったりと微妙。

しかし.ideavimrcを入れればこの辺り設定できる

" 検索をファイルの先頭へ循環しない
set nowrapscan
" 小文字で検索したときに大文字小文字を無視
set smartcase
" 検索結果をハイライト
set hlsearch
" 不可視文字を表示する
set list

こんなのを作ってdotfilesあたりに.ideavimrcを入れておいてシンボリック貼るで完璧

ln -s dotfiles/.ideavimrc .ideavimrc

このファイルGithubに上げといたので使ってみて

takinoue/dotfiles · GitHub

Intellijでmonokaiなどのカラースキーマを利用する

IntellijでもVimのように好きなカラースキーマを設定できる。設定は簡単で設定ファイルをダウンロードしてきて、IntellijのFileのImport Settingsからjarファイルをインポートするだけ。

y3sh/Intellij-Colors-Sublime-Monokai · GitHub

インポート後適用されていなければEditorのColors & FontsからScheme nameでインポートしたカラースキーマを選択する。ちなみに同じMonokaiでもたくさんあるんだけど、ここで紹介しているSublimeMonokaiがおすすめ。検索した時のハイライトが黄色で見やすい。

できればMolokaiがいいのだがよくわからない。

Intellijで関数名や演算子のスペースの入れ方を設定する

例えば関数の後ろの括弧にスペースを入れたいとか、演算子の間にスペースは入れたくないとか人によってこだわりがあると思うが、Intellijではそのあたりの細かい設定もきちんと出来る。

Editor/Code Styleと入って行くと言語毎にその辺りの設定ができる

f:id:hoge:20150129212710p:plain

私はJavaScriptのスペース配置はこのように設定している

Gradleを使ってjarパッケージを作成する

コードはIntellijでGradleを使ったプロジェクトを作成する - hoge日記を使ってGradleのコマンドでjarパッケージを作成してみる

単純なコンパイル

いわゆるコンパイルはこれ

gradle compileJava

成功するとこんなメッセージが出る

BUILD SUCCESSFUL
Total time: 19.756 secs

jarパッケージを作成

このようにbulid.gradleを記述する。jarのあたりがMainClassの設定とかパッケージを内包させるかなどの設定を行っている。

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.http-client:google-http-client:1.19.0'
}
jar {
manifest {
attributes 'Main-Class' : 'Hajimete'
}
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

jarファイルを作成

gradle jar

生成されたファイルはbuild/libに格納されているので実行する

java -jar hoge3-1.0.jar

example.comの結果が出力されれば成功。
Javaマルチプラットフォームで実行可能なので、ライブラリを内包すればどこの環境でもJavaさえインストールすれば動く。実行する側のハードルは非常に低いのが好き。

Thanks

IntellijでGradleを使ったプロジェクトを作成する

IntellijでGradleを使えるようにする所までを目指す

Gradleのインストール

$ brew search gradle
gradle     gradle110  gradle112  gradle16   gradle18   gradle20   gradle21

今回はgradle21をインストールしてみる

brew install gradle21

IntellijでGradleプロジェクトを実行

プロジェクトの作成は簡単でGradleを指定するだけ。自動的にファイルが生成されるがsrcディレクトリが生成されないので、src/main/javaディレクトリを自分で作ってそこに置いた。

クラスファイルを作成

google-http-java-client を使用するサンプルコードを参考にさせてもらってこんなクラスファイルを設置。

import java.io.IOException;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
public class Hajimete
{
public static void main(String[] args) throws IOException {
HttpTransport httpTransport = new NetHttpTransport();
try {
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
GenericUrl url = new GenericUrl("http://www.example.com/");
HttpRequest req = requestFactory.buildGetRequest(url);
HttpResponse res = req.execute();
try {
System.out.println(res.getStatusCode());
System.out.println(res.getContentType());
System.out.println(res.parseAsString());
} finally {
res.disconnect();
}
} finally {
httpTransport.shutdown();
}
}
}

build.gradleを設定

google-http-java-client 入門 - ひだまりソケットは壊れないを参考にしてbuild.gradleに必要な記述を追加

apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.http-client:google-http-client:1.19.0'
}

これでメニューからRunを選択して実行すればhttp://example.comの内容が出力されるようになっているはずである。

AndroidとUSBでシリアル通信をする

AndroidをUSBキーボードにできないかと調査していたらこんな資料を発見した。AndroidとPCとの通信について限定ではないが何か足がかりになるかもしれない。

Androidをキーボードとして認識させることで、テンキーとして利用したり、キー入力マクロなどを作れるのではないかと考えている。