【GitHub】 リモートリポジトリにpushした内容に戻す方法
この記事ではWindows10にインストールしたGit 2.37.2を使っています。
コマンドライン引数に与えるユーザー名は適宜読み替えてください。
また、適宜キャプチャ画像に手書きを加えて解説しております。
自分が初学者というのもあり丁寧に書いています。
一部の方々にはくどいと思われるかもしれませんが、ご容赦ください。
※注意
以下に示す方法で戻して削除した履歴は、再度復旧することはできません。
(例)この場合、4と5の履歴はGitHubのリモートリポジトリに消えてしまいます。
戻す前:1→2→3→4→5
後:1→2→3
①GitHubDesktopのCommit履歴の順番を整理しましょう
変更したいリポジトリを、▼から選択
→GitHub Desktop(ローカルリポジトリ)のHistoryから、戻したいCommitを確認しましょう。
・下記画像だと、Commit履歴の順番は以下の通りです。
1. firstcommit
2. 各モデル、テーブルの生成
3. ファイル名fukui-tripをgitignoreに追加
4. 中間テーブルの生成
5. 各マイグレーションファイルにテーブルを定義した
②戻したい履歴のコードを取得しましょう
例えば、"5.各マイグレーション…"の作業を削除し、"4.中間テーブル…"のところに戻したい場合、"4.中間テーブル…"を選択し、画面中央上部にあるコード(ここでは 2c7e7e1
)をメモしましょう。
③実際に、pushした内容を戻しましょう
ターミナルもしくはコマンドプロンプトを起動
→要すれば、cd
(change directory)で対象のフォルダ先に移動
→git reset --hard コードの番号
を入力
※下記画面ではコード番号 "7b3e91e" になっていますが、正しくは "2c7e7e1" です!
→Enterを押すと、下記のようにHEAD is now at...
と表示
※下記画面ではコード番号 "7b3e91e 各マイグレーションファイルに..." になっていますが、正しくは "2c7e7e1 中間テーブル…" です!
これで、Commitの履歴が変わりました!
④最新のpush内容に対し、上書きをしましょう
最新のpush内容(ここでは、"5.各マイグレーション…")と齟齬があるので、ターミナルもしくはコマンドプロンプトで git push -f origin master
を入力
→Enterを押し、下記画像のようなコードが出ればOK!
⑤最後に、履歴が戻っているか確認しましょう
GitHubDesktop(ローカルリポジトリ)およびGitHubブラウザ版(リモートリポジトリ)を見て、どちらも戻したい作業まで戻っているか確認
あとがき
いかがでしたしょうか。
自分もGitHubに残した過去の内容に戻したく色々調べたのですが、複数のサイトを見てようやく出来ました。
なので、「1つの記事で分かった方が良いよね」という思いからこの記事を執筆しました。
この記事を見て、GitHubに残して作業すれば、失敗を恐れず作業できるエンジニアが増えてくれると嬉しいです。
また、実はこれが初めての投稿なので、みなさんに上手くお伝えできているかどうか不安というのがあります。
今後も初学者向けに丁寧な記事を投稿したいので、ぜひコメントなどお願いいたします。