こんにちは。
最近、プログラミングを始めて、エンジニアを目指している人です。
今回はgit reset --soft
についてメモがてら書きます。
とりあえず、はやく git reset --softのやり方を。。。!!
という方用に、最初に私がやった方法を置いておきます
#やったこと
私がやったのは、 git reset --soft で、
10個くらいのコミットの内容を1つのコミットにまとめるというものです。
まずは
git log
を実行して、コミットログを表示します。
私の場合ここで、
コミットA
コミットB
コミットC
コミットD
コミットE
コミットF
コミットG
コミットH
みたいな感じのログが表示されました。
やりたいのは
コードはコミットHの内容のまま、
コミットログ的には、コミットAしかコミットしてないよ!という感じ
にしたかったので、
git reset --soft コミットAのコミットID
と実行し、何の問題もなく、1発でキレイなコミットを作ったような雰囲気になりましたとさ。
めでたしめでたし。
#詳細
ここからは、git reset --soft
にたどりつくまでと、
そもそもそれ何?ってところを書きます。
###たどり着くまで
タイトルにあるように、commitが多すぎて、
commitをキレイにしてほしいといわれました。
なんやそのコミットみたいなのが10個以上あって汚い上に、
大量のコミットの中身は、インデントの修正のみ...
それはあきれられても仕方ないですね。
ということでキレイにしましょう。
まずは git commit まとめる
で検索!
検索結果...
git rebase -i
これがまとめる方法らしい!
なるほどなるほど...これは前のコミットに次のコミットの内容を押し込む感じということかな...?
うーん...私のやりたいことは本当にこれなのか?
私がやりたいのは、
- コミットA ←実装完了のコミット
- コミットB ←インデント修正のコミット
- コミットC ←インデント修正のコミット
- コミットD ←インデント修正のコミット
- コミットE ←インデント修正のコミット
- コミットF ←インデント修正のコミット
- コミットG ←インデント修正のコミット
- コミットH ←インデント修正完了のコミット(最終コミット)
上記の中の、
コミットAに、最終コミットの情報を反映させてプルリクを出したいのだ。
しかも全部インデントの修正で同じところばかり触っているので、
BとかCとかをわざわざ反映させる必要なんてないのです。
どうすりゃいいんだい。(今みてみると本当にひどいコミットだ)
先輩に相談してみた
私「先生、私がやりたいことを実現するためにrebaseを行うのは正しいですか?」
先輩「えっ、リセットソフトでよくない?」
リセットソフト....?
なにそれ出てこなかったよ...(ここでググり力のなさが露呈した)
で、とりあえず調べてみた結果をまとめたところ
最終コミットの内容は保持した状態で、
コミットだけを削除できる
呪文らしい。
なんと!私がやりたいのはこれではないか!
ということで、最初に戻る
ちなみに、
気を付ける点として、
git reset --hard
という、コミットも変更内容も全部リセットする呪文もあるらしい。
これは、
いろいろいじってどこが原因がわからないけど詰まった!
とかで、前のコミットに戻りたい時に使うらしいです。
怖いので、私はまだ使ったことないですが、Tips程度に乗せておきます。