revertせずにGitで中間コミットを消す方法
Gitでrevertせずに中間コミットを消したいときはありませんか?
Gitでrevertした後にマージもれが発生する場合があるという事例も報告されていますし、マージもれさせないためにもできるだけrevertしたくないということもあると思います。
プロジェクトによってはrevertをあまりしない方がいいという規約があるかもしれませんね。
今回はGitでrevertせずに中間コミットを消す方法についてご紹介いたします。
どういう方法かというと、revertではなくrebaseを使った方法になります。
Gitでrevertせずに中間コミットを消す方法
次のようなリポジトリがあるとします。
ご覧の通り全部で7コミットあり、
coommit 1
commit 2
commit 3
commit 4
no need commit
commit 5
commit 6
という順でコミットされています。(1つ目のコミットがcoommit 1となっているのは誤字です。言わずもがな、正しくはcommitですね)
この中で「no need commit」を消したいとします。
やり方は簡単で、まずコマンドラインで「git rebase -i HEAD~6」を叩きます。(HEADのあとは任意の数を指定。6を入力すると6個前のコミットまでさかのぼれます。)
するとこのような画面が出てきます。
実は、ここで「no need commit」を消してやって「:wq」をすれば「no need commit」のコミットを消すことができるのです。
「no need commit」を消し、この状態で「:wq」を押します。(何を言っているかよく分からない方はrebaseのやり方をググってください)
するとリベースが成功してこのようになりますね。
あとは「git push -f origin master」でforce pushします。
コミットログをご覧ください。
「no need commit」が消えているはずです。
なお、rebaseしてforce pushする作業はコミットIDが変わったりするのであまりおすすめできません。
revertが許されるなら素直にrevertをした方が良いと思います。
終わりに
今回はGitでrevertせずに中間コミットを消す方法についてご紹介いたしました。
使用した方法はrevertではなくrebaseです。
繰り返しになりますが、rebaseの取り扱いにはご注意ください。
ディスカッション
コメント一覧
まだ、コメントがありません