やりたい事

gitで操作を間違ってしまいリモートで上がっているものを、強制的に前に戻したい!

手順

ローカルでマスターに移動(ターミナル)

マスターで作業する必要があるのでマスターに移動しましょう

git branch で今どこにいるか確認
 
 katsunotenranoMacBook-Pro:freemarket_sample_53a katsunotenra$ git branch
   BUILD-UP=TENRA
   Build-up-signup
 * login-build-tenra
   master
   remake
   remake-error

git checkout master でマスターに移動 
 git checkout master
 Switched to branch 'master'
 Your branch is up to date with 'origin/master'. 

こんな感じになればオーケイ。

どこまで戻るか決める(ターミナル)

git logをアプリケーション上で実行
 
 katsunotenranoMacBook-Pro:freemarket_sample_53a katsunotenra$ git log
 commit 77cf063160d6956242c949d5bf1772c01849b21a (HEAD -> master, origin/test-sanda, origin/master)
 Merge: 46d5b81 5a43a81
 Author: nonodes <51069237+nonodes@users.noreply.github.com>
 Date:   Fri Jul 19 15:51:43 2019 +0900
 

     Merge pull request #96 from tenra1115/Fix_6
     
     Fix_root_editprofile
 

 commit 5a43a818c23c7c481914cb411ca52e104a88de5e
 Author: nonodes <laopilove2@yahoo.co.jp>
 Date:   Fri Jul 19 15:50:02 2019 +0900
 

     Fix_root_editprofile
 

 commit 46d5b818152fa48c17ae8095741a04b6ae98582e
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:55:58 2019 +0900
 

     remake
 

 commit f44f2b43a7d6a294f798120e3c2cade1c11e38a2
 Merge: d9026b3 06ca710
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:45:45 2019 +0900
 

     Merge branch 'master' of https://github.com/tenra1115/freemarket_sample_53a
 

 commit d9026b3309139b4a3333a0b75cf0a16d396e8f28
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:38:41 2019 +0900
 

     remake

ここから出るときは q で出れるよ😉

戻る位置が決まったらそこをメモ(ハッシュ値をメモ)

commit d9026b3309139b4a3333a0b75cf0a16d396e8f28 のcommit以外をコピペ

例 1番下の記録に戻りたければ

d9026b3309139b4a3333a0b75cf0a16d396e8f28 これをコピペ

コマンド実行(ターミナル)

アプリケーション上のターミナルで
git reset --hard メモした値をはっつける
これで強制的に選んだところまで戻る

ローカル側を確認(ターミナル)

git logをもう一度実行し、1番上がリセットした値のものになっているか確認。

正しく動作が行われているようであればローカルはおっけい!

ここまでで、ローカル側の部分は正常に戻す事をしています。

次にローカル側でgit reset –hardしたものをリモートのマスターにあげて、ローカルのマスターとリモートのマスターを一致させる必要があります。

リモート側にプッシュ(ターミナル)

ローカル側で変更したものをリモートにプッシュしてあげましょう。

普通のプッシュとは少し違います。

git push -f origin ハッシュ値:master ハッシュ値はさっきコピペした値と同じものを使用

さっきの例で行くと

git push -f origin d9026b3309139b4a3333a0b75cf0a16d396e8f28:master って感じ

これでリモート側に変更点が映りました。

確認したいときはリモートmasterの最終コミット番号がさっきプッシュしたものと同じか確認できると思います!

注意点

便利な反面、記録が消えるので注意

少ないコマンドで戻れることは便利なのですが、今作業しているところから戻るところまでの間の変更は全てなくなってしまいます。なのでgit reset –hard するときは慎重に行いましょう。

katsunotenranoMacBook-Pro:freemarket_sample_53a katsunotenra$ git log
 commit 77cf063160d6956242c949d5bf1772c01849b21a ここから (HEAD -> master, origin/test-sanda, origin/master)
 Merge: 46d5b81 5a43a81
 Author: nonodes <51069237+nonodes@users.noreply.github.com>
 Date:   Fri Jul 19 15:51:43 2019 +0900
 

     Merge pull request #96 from tenra1115/Fix_6
     
     Fix_root_editprofile
 

 commit 5a43a818c23c7c481914cb411ca52e104a88de5e
 Author: nonodes <laopilove2@yahoo.co.jp>
 Date:   Fri Jul 19 15:50:02 2019 +0900
 

     Fix_root_editprofile
 

 commit 46d5b818152fa48c17ae8095741a04b6ae98582e
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:55:58 2019 +0900
 

     remake
 

 commit f44f2b43a7d6a294f798120e3c2cade1c11e38a2 ここまでの変更点が全て削除される
 Merge: d9026b3 06ca710
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:45:45 2019 +0900
 

     Merge branch 'master' of https://github.com/tenra1115/freemarket_sample_53a
 

 commit d9026b3309139b4a3333a0b75cf0a16d396e8f28
 Author: tenra1115 <katsuten1115@icloud.com>
 Date:   Thu Jul 18 18:38:41 2019 +0900
 

     remake 
commit 77cf063160d6956242c949d5bf1772c01849b21a これから
commit f44f2b43a7d6a294f798120e3c2cade1c11e38a2 ここまでの変更点が全てなくなる。

この操作はやり直しが効かなくなると思うので、結構最終手段として使う事をお勧めします。チームで開発している場合は話し合ってから決めましょう(なんせリモートが変わっちまうんだからね)