初めに
gitでcommitしたけどその後不具合が発生したことはよくあります。そんな時にファイルの履歴を過去に戻す方法について記事にしてみました。
※内容に間違いなどがある場合はご指摘をよろしくお願いします。
基本はコマンドラインで操作する
github desktopなどGUIベースでgitの操作が簡単にできるようになってはいるものの、gitの細かい操作には向いてないのでお勧めしません。コマンドラインで履歴を戻すにはワークツリー、ステージ、リポジトリというgitの仕組みを理解する必要があります。
https://qiita.com/redrabbit1104/items/2046a7853351e69c1b18
git logで履歴を確認
先ずは「git log」コマンドで今までの履歴を確認します。
>git log
commit b34c256fd724cc269144abdeddc42d31101c2374 (HEAD -> master)
Author: redrabbit1104 <redcaprabbit1104@gmail.com>
Date: Wed Apr 21 07:26:25 2021 +0900
modify-html
commit c808493e13e5d42f5371f00f4efa8ccaa224d5c9
Author: redrabbit1104 <redcaprabbit1104@gmail.com>
Date: Wed Apr 21 07:25:33 2021 +0900
first_commit
(END)
最新のcommit(履歴)が一番上で下の方が古いcommit(履歴)です。HEADは一番最後にcommitした履歴。つまり最新の履歴です。commitの隣の長い番号(b34c256fd724cc269144abdeddc42d31101c2374)はcommitした時の管理番号みたいなものであり、この番号を使って履歴を戻すことができます。
# index.htmlファイル
<body>
<div></div>
<p></p>
<a href=""></a>
TEST #"TEST"という文字列が書いてある
</body>
git reset
git resetコマンドを使って過去に戻ることができます。そのためには先程のcommit番号が必要です。今回は戻りたいところが「first_commit」という履歴だとします。commit番号は「c808493e13e5d42f5371f00f4efa8ccaa224d5c9」。
因みにgit restの後にこの番号を入力すればいいのですが、「--hard」「--mixed」
「--soft」があります。
- --soft :commitのみ取り消す(ローカルリポジトリーの取り消し)
- --mixed : commitとaddの取り消し(ローカルリポジトリーとステージの取り消し)
- --hard : commitとaddと作業場の修正内容まで全部取り消し(ローカルリポジトリーとステージ、ワークツリー全て取り消す)
いろいろありますが、基本的には--hardで大丈夫です。
git reset --hard 「戻りたい時点のcommit番号」
>git reset --hard c808493e13e5d42f5371f00f4efa8ccaa224d5c9
HEAD is now at c808493 first_commit
first_commitに戻りましたとメッセージが出ます。
履歴とファイルの確認
git logで履歴を確認します。
❯ git log
commit c808493e13e5d42f5371f00f4efa8ccaa224d5c9 (HEAD -> master)
Author: redrabbit1104 <redcaprabbit1104@gmail.com>
Date: Wed Apr 21 07:25:33 2021 +0900
first_commit
(END)
modify-htmlの履歴がなくなり、現在first_commitが最新の履歴になりました。index.htmlのファイルを確認してみます。
# index.htmlファイル
<body>
<div></div>
<p></p>
<a href=""></a>
#"TEST"という文字列が消えている
</body>
これで履歴が戻ったことが確認できました。
参考記事
https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe
https://www.sejuku.net/blog/71512