Takahiro Octopress Blog

-1から始める情弱プログラミング

GitでリモートにPushした内容を取り消したい!!

SourceTreeでgit resetを使いこなそう!

さて、本日は Git について書きます。
皆さんは、GitでリモートにPushした内容を取り消したくなることがありませんでしょうか?
そんなときに利用するのがgit resetコマンドです。

リモートにPushした内容ということは自分だけの範疇では収まらないため、他の人に影響が出るかもしれません。
それって考えてみると非常に怖いですよね…。
しかし、どうしてもリモートの内容を修正したいことが出てきます。
今回はそんな不安を跳ね飛ばすべく実際に練習してみました。

git reset

今回扱うGitのRepositoryはこちらです。
Git Repository

では実際にgit resetを実行してみましょう。

git reset —soft

まずはgit reset --softを実行してみます。
SourceTreeでは下記の手順で実行します。

1.元に戻したいポイントで右クリック
2.「このコミットまでmasterを元に戻す」を選択
3.モードで Soft を選択する

Softモード

これでローカル上でコミット前のmasterに戻せます。
masterに反映した分を別ブランチに持って行きたい場合は別ブランチを切って、そちらにコミットすれば良いです。

別ブランチに反映

続いて、リモートのmasterからプッシュ分を取り除くためには、ローカルのmasterの状態をプッシュしなくてはなりません。
SourceTreeでは強制プッシュはデフォルトでOFFになっているため、設定を変更する必要があります。

SourceTreeで強制プッシュをONに変更

4.強制プッシュを実行する

これにより、Gitの状態は下図のようになります。
Git Repositoryの結果

git reset —mixed

続いてgit reset --mixedを実行してみます。

1.元に戻したいポイントで右クリック
2.「このコミットまでmasterを元に戻す」を選択
3.モードで Mixed を選択する

Mixedモード

これでローカル上でコミット前のmasterに戻せます。
softと異なるのは コミットだけでなくaddも取り除ける ということです。

mixedを実行した状態

もちろんsoftのときと同様に別ブランチに内容を反映させることができます。

別ブランチに反映

4.強制プッシュを実行する

強制プッシュ実行後は下図のようになります。

Git Repositoryの結果

git reset —hard

最後にgit reset --hardを実行してみます。

1.元に戻したいポイントで右クリック
2.「このコミットまでmasterを元に戻す」を選択
3.モードで Hard を選択する

Hardモード

これでローカル上でコミット前のmasterに戻せます。
softmixedと異なり、作業内容が一切削除されます。

hardを実行した状態

4.強制プッシュを実行する

強制プッシュ実行後は下図のようになります。

Git Repositoryの結果

まとめ

さていかがでしたでしょうか?
通常はあまりやりたくない操作ではありますが、必要となるタイミングは必ずくるはずなので知っておいて損はないでしょう。
筆者も早速3連休明けから使いそうな予感が…。
と言ったところで本日はここまで。

Comments