Gitで一個前のコミットから作業したいケースと方法
概要
git revert --no-commitが使えるね、というメモ。
動機
Javaを書いていると、以下のようなバージョニングを行う。(pom.xmlなどの記述)
version=1-SNAPSHOT
そもそも、1.0.0-SNAPSHOTじゃないのか、という話はここでは一旦置いておく。このバージョンをリリースしたら、こうなる。
version=1
これでgit tag version-1などして、タグ付けしたら、バージョンをあげてコミットしたいだろう。
version=2-SNAPSHOT
この作業を手作業でやることになったが(自動リリーススクリプトがうごかないケースがあった)、記述箇所が多い為、sedで置換などする。
1-SNAPSHOTを1にするのは、簡単だった。しかし、1を2-SNAPSHOTにするのは至難である。
1はバージョン以外にも使われてる為である。
だったらコミット前の状態(1-SNAPSHOTから1にしたもの)に戻して、1-SNAPSHOTを2-SNAPSHOTに置換したい。
git reset HEAD^ではなく?
git reset HEAD^を試してみる。1-SNAPSHOTに戻った。さて、これを2-SNAPSHOTにしよう。
置換できた。コミットしよう。。。
いや、だめだ。これだと分岐してしまう。
この状態をパッチにして、HEADに当てようか、、いや、それもだめだ。
HEADは1がbaseであるためパッチはあたらない。
commitの逆操作をcommitなしにパッチとして取り出して、それを書き換えたい。
どうやるか
git revertは、あるコミットを打ち消すコミットをすると記憶していた。
具体的には
- 逆操作を行うパッチを作成する
- パッチをコミットする
という2段階の操作が行われる。これを1段階目だけで終えたい。そのためには、
git revert --no-commit(もしくは-n)とすればいいそうだ。
git revert HEAD --no-commit
git reset HEAD
(1-SNAPSHOTを2-SNAPSHOTへ置換)
git commit
かゆいところに手が届く。やはり良い。
##参考
Previous Mar 28, 2015
« Vagrant内のJVMに対してJconsoleとか使う、JMX over SSH
« Vagrant内のJVMに対してJconsoleとか使う、JMX over SSH
Sep 25, 2015 Next
Javaのテスト実行時間を62%削るvmvmを試してみた »
Javaのテスト実行時間を62%削るvmvmを試してみた »