Gitのリセットを使いこなして、間違いを修正しよう!


Gitのリセットを使いこなして、間違いを修正しよう!

どうもですよ!はやちですよ!٩( ᐛ )و

フロントエンド入門のGit連載をご覧になってるみなさま、Gitはご利用なられましたでしょうか( ˇωˇ ) Git使い始めは、誰にでも間違いはつきもの。はやちもテンパってしまう癖があるので、ちょいちょいやらかしてしまうことがあります( ˇωˇ )

今回はそんなときに役立つ、Gitで間違えて操作してしまったときの対処法をまとめました。sourcetreeベースでご紹介をいたします( ˇωˇ )

▼目次

間違いを修正する「リセット」

リセットは、ファイルを以前の状態に巻き戻すことで、ステージ上でもローカル上でも操作できます。

例えば、

  • ステージ上で更新を加えていたファイルを途中で操作する前に戻したいとき
  • ローカル上で、コミットのコメントを間違えてしまったとき
  • 一旦戻して追加修正したいとき
  • もうこのコミットもろともなかったことにしてしまいたいとき

などのシーンに対応できます( ˇωˇ)☝

ステージ上のファイルを戻す場合

ステージ上では、作業しているファイルを操作する前に戻すことができます。手順をご紹介します。

 
reset01

コーディングの作業をすると、このように変更されたファイルがあがってきます。

 
haki

対象となるファイルから、右クリックでメニューが表示されます。対象の変更されたファイルの横にあるメニューから「破棄」を選択しましょう( ˇωˇ ) これで、ファイルの変更を破棄できます。

 
haki2

また、追加してしまったいらないファイルは「削除」を選択すれば、ファイル自体をこの場で消すことも可能です。

 
一番危険度が少ない手順なので落ち着いてやれます( ˇωˇ )

  • 破棄」・・・ファイルに加えられた変更を破棄する。
  • 削除」・・・ファイルそのものを削除する

この2つは違うものなので、お気をつけくださいまし( ˇωˇ ) あと、破棄された変更箇所は二度と元に戻すことができないため、要注意です( ˇωˇ)☝

ローカル上でのコミットを戻す方法

ローカルでのリセットは、下記の3種類になります( ˘ω˘)☞三☞シュッシュッ

  1. コミットメッセージだけ修正してコミットし直したい:git reset --soft
  2. 変更内容を追加してコミットし直したい:git reset --mixed
  3. コミット自体なかったことにしたい:git reset --hard

1つずつ見ていきましょう。

1. コミットメッセージだけ修正してコミットし直したい:git reset --soft

コミットメッセージだけを修正してコミットし直したい場合は、git reset --softが使えます( ˇωˇ)☝

 
select

直近のコミットのひとつ前のコミットに戻すとします( ˇωˇ)☝戻したいコミットの所で右クリック選択します。

 
menu

メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝

 
スクリーンショット 2016-03-11 5.13.27

すると、こちらのボックスが現れます。Mixedはコミットを戻してファイルを変更したいとき、Hardはコミット自体を戻したいときのオプションです。今回はコミットコメントを修正したいだけなので、Softを選択します。

ここで、riset --softを選択することができます。

 
reset

上記の作業を完了すると、このように、コミットが戻されます。

 
soft

「作業コピー」には、「ステージ」に上がっている状態のファイルが戻っています。これで、コミットメッセージを入れ直すことができます。

 
file

コミットだけを戻すだけなので、ステージとローカルのファイルはそのままの状態で残っています。ここに、コメントをつけ直すことができます。
 

おまけ

なお、コメントをつける方法はリセット以外にもあります。

 
amand

修正したい箇所を選択して、コミットボタンを押します。

 
amand2

ここでコミットのコメントを編集できます。

 
amand3

コミットオプションを「最新のコミットを修正」に変えないとコミットし直すことができないので、お気をつけを( ˇωˇ)☝

2. 変更内容を追加してコミットし直したい:git reset --mixed

変更内容を追加してコミットし直したい!という状況では、git reset --mixedを使います( ˇωˇ)☝

 
コメント6

直近のコミットのひとつ前のコミットに戻すとします( ˇωˇ)☝ 戻したいコミットの所で右クリック選択しましょう。

 
menu

メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝

 
スクリーンショット 2016-03-15 21.29.44

ここで、riset --mixedを選択します。

 
reset

すると、softのときと同様に、ひとつ前のコミットに戻った状態となります。

 
mild

softと異なるのは、ステージの前の「作業ツリー」の状態に戻ることです。これで、作業を追加し直すことができます。

 
file2

図で見てみると、このようにコミットを戻して、ステージの前の作業ツリーの状態に戻ります。ここでまた内容変更や追加をすることで、コミットし直せます。

3. コミット自体なかったことにしたい:git reset --hard

コミット自体をなかったことにしたいときは、git reset --hardを使います( ˇωˇ)☝

 
直近のコミットの1つ前のコミットに戻すということで、操作方法を見ていきましょう。

コメント6

まずは、戻したいコミットの所で右クリック選択します。

 
menu

メニューが開くので、「このコミットまでmasterを元に戻す」を選択します( ˇωˇ)☝

 
スクリーンショット 2016-03-15 21.39.36

ここでriset --hardを選択します( ˇωˇ)☝

スクリーンショット 2016-03-13 18.34.59

このような警告がでます。今回は、コミット自体なかったことにするのが目的なので、OKを選択して大丈夫! 思い切って「OK」ボタンを押しましょう。

 
end

コミットが綺麗さっぱりなくなりました! これで、ステージにも作業ツリーにも、なくなっている状態になります。

 
file3

こちらはコミットがなくなっただけではなく、ステージも作業ツリーも破棄されてしまいます。つまり、このhardオプションをおこなうと、「コミット」「ステージ」「作業ツリー」もろともなくなってしまい、これらを二度と元に戻すことが不可能なので、操作には注意が必要です( ˇωˇ)☝

くれぐれも誤操作をして▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああってならぬようお気をつけくださいまし( ˇωˇ)☝

Pushしてしまった場合

今回ご紹介した操作は、すべてPushする前のローカル上での作業という前提になります。Pushしてしまったコミットログを操作するのは一緒に作業をしている人の作業履歴を改変してしてしまい、PullもPushもできなくなってしまう可能性があります!

ですから、Push後のリセットダメ!絶対(`⊙ω⊙´)カッ!!

Push済みのものを戻したい場合はresetやrebaseではなく、revertを使って修正をおこなうことができます。このrevertについては次の連載にてご紹介いたします( ˘ω˘)☞三☞シュッシュッ

まとめ

以上が間違ってしまったときのリセットの操作方法です。リセットする際のコミットの動きを理解することによって、誤操作なく作業のやり直しができますね! 私もこれを理解するまで、何度かやらかしてしまったことがちょいちょいと……( ˇωˇ )<ごめんち これをご覧になられた皆様も、くれぐれもお気をつけてお使いくださいまし( ˇωˇ)☝


この記事を書いた人

はやち
はやち フロントエンドエンジニア 2010年入社
フロントエンドエンジニアのはやちです( ˘ω˘)☝
以前までは顔隠しておりましたが思い切ることにしました…。
相変わらず顔文字乱舞ですがブログもコーディングも楽しくやっていこうと思います✌(´ʘ‿ʘ`)✌
今までに作ったDemoたちはGithubにて公開しております!よろしければ是非( ˘ω˘)☞三☞シュッシュッ