どうもですよ!はやちですよ!٩( ᐛ )و
フロントエンド入門のGit連載をご覧になってるみなさま、Gitはご利用なられましたでしょうか( ˇωˇ ) Git使い始めは、誰にでも間違いはつきもの。はやちもテンパってしまう癖があるので、ちょいちょいやらかしてしまうことがあります( ˇωˇ )
今回はそんなときに役立つ、Gitで間違えて操作してしまったときの対処法をまとめました。sourcetreeベースでご紹介をいたします( ˇωˇ )
目次
間違いを修正する「リセット」
リセットは、ファイルを以前の状態に巻き戻すことで、ステージ上でもローカル上でも操作できます。
例えば、
- ステージ上で更新を加えていたファイルを途中で操作する前に戻したいとき
- ローカル上で、コミットのコメントを間違えてしまったとき
- 一旦戻して追加修正したいとき
- もうこのコミットもろともなかったことにしてしまいたいとき
などのシーンに対応できます( ˇωˇ)☝
ステージ上のファイルを戻す場合
ステージ上では、作業しているファイルを操作する前に戻すことができます。手順をご紹介します。
コーディングの作業をすると、このように変更されたファイルがあがってきます。
対象となるファイルから、右クリックでメニューが表示されます。対象の変更されたファイルの横にあるメニューから「破棄」を選択しましょう( ˇωˇ ) これで、ファイルの変更を破棄できます。
また、追加してしまったいらないファイルは「削除」を選択すれば、ファイル自体をこの場で消すことも可能です。
一番危険度が少ない手順なので落ち着いてやれます( ˇωˇ )
- 「破棄」・・・ファイルに加えられた変更を破棄する。
- 「削除」・・・ファイルそのものを削除する
この2つは違うものなので、お気をつけくださいまし( ˇωˇ ) あと、破棄された変更箇所は二度と元に戻すことができないため、要注意です( ˇωˇ)☝
ローカル上でのコミットを戻す方法
ローカルでのリセットは、下記の3種類になります( ˘ω˘)☞三☞シュッシュッ
- コミットメッセージだけ修正してコミットし直したい:
git reset --soft
- 変更内容を追加してコミットし直したい:
git reset --mixed
- コミット自体なかったことにしたい:
git reset --hard
1つずつ見ていきましょう。
1. コミットメッセージだけ修正してコミットし直したい:git reset --soft
コミットメッセージだけを修正してコミットし直したい場合は、git reset --soft
が使えます( ˇωˇ)☝
直近のコミットのひとつ前のコミットに戻すとします( ˇωˇ)☝戻したいコミットの所で右クリック選択します。
メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝
すると、こちらのボックスが現れます。Mixedはコミットを戻してファイルを変更したいとき、Hardはコミット自体を戻したいときのオプションです。今回はコミットコメントを修正したいだけなので、Softを選択します。
ここで、riset --soft
を選択することができます。
上記の作業を完了すると、このように、コミットが戻されます。
「作業コピー」には、「ステージ」に上がっている状態のファイルが戻っています。これで、コミットメッセージを入れ直すことができます。
コミットだけを戻すだけなので、ステージとローカルのファイルはそのままの状態で残っています。ここに、コメントをつけ直すことができます。
おまけ
なお、コメントをつける方法はリセット以外にもあります。
修正したい箇所を選択して、コミットボタンを押します。
ここでコミットのコメントを編集できます。
コミットオプションを「最新のコミットを修正」に変えないとコミットし直すことができないので、お気をつけを( ˇωˇ)☝
2. 変更内容を追加してコミットし直したい:git reset --mixed
変更内容を追加してコミットし直したい!という状況では、git reset --mixed
を使います( ˇωˇ)☝
直近のコミットのひとつ前のコミットに戻すとします( ˇωˇ)☝ 戻したいコミットの所で右クリック選択しましょう。
メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝
ここで、riset --mixed
を選択します。
すると、softのときと同様に、ひとつ前のコミットに戻った状態となります。
softと異なるのは、ステージの前の「作業ツリー」の状態に戻ることです。これで、作業を追加し直すことができます。
図で見てみると、このようにコミットを戻して、ステージの前の作業ツリーの状態に戻ります。ここでまた内容変更や追加をすることで、コミットし直せます。
3. コミット自体なかったことにしたい:git reset --hard
コミット自体をなかったことにしたいときは、git reset --hard
を使います( ˇωˇ)☝
直近のコミットの1つ前のコミットに戻すということで、操作方法を見ていきましょう。
まずは、戻したいコミットの所で右クリック選択します。
メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝
ここでriset --hard
を選択します( ˇωˇ)☝
このような警告がでます。今回は、コミット自体なかったことにするのが目的なので、OKを選択して大丈夫! 思い切って「OK」ボタンを押しましょう。
コミットが綺麗さっぱりなくなりました! これで、ステージにも作業ツリーにも、なくなっている状態になります。
こちらはコミットがなくなっただけではなく、ステージも作業ツリーも破棄されてしまいます。つまり、このhardオプションをおこなうと、「コミット」「ステージ」「作業ツリー」もろともなくなってしまい、これらを二度と元に戻すことが不可能なので、操作には注意が必要です( ˇωˇ)☝
くれぐれも誤操作をして▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああってならぬようお気をつけくださいまし( ˇωˇ)☝
Pushしてしまった場合
今回ご紹介した操作は、すべてPushする前のローカル上での作業という前提になります。Pushしてしまったコミットログを操作するのは一緒に作業をしている人の作業履歴を改変してしてしまい、PullもPushもできなくなってしまう可能性があります!
ですから、Push後のリセットダメ!絶対(`⊙ω⊙´)カッ!!
Push済みのものを戻したい場合はresetやrebaseではなく、revertを使って修正をおこなうことができます。このrevertについては次の連載にてご紹介いたします( ˘ω˘)☞三☞シュッシュッ
まとめ
以上が間違ってしまったときのリセットの操作方法です。リセットする際のコミットの動きを理解することによって、誤操作なく作業のやり直しができますね! 私もこれを理解するまで、何度かやらかしてしまったことがちょいちょいと……( ˇωˇ )<ごめんち これをご覧になられた皆様も、くれぐれもお気をつけてお使いくださいまし( ˇωˇ)☝
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。