Post

6 . コードを間違えたら、戻そう!


gitは、バージョン管理プログラム

Git はバージョン管理プログラムであることを、もう一度思い出しましょう。
作業がうまくいかなかったり、問題があった場合、いつでも以前のCommitに戻ったり、問題のあるCommit履歴をキャンセルすることができます。

image-20240715153715849

きれいに実習するため、新しくプロジェクトを始めましょう。
1 . インストールと環境設定 (Win&Mac)を参考にして、作業フォルダを初期化し、ファイルを作成してCommitを3回ほど進めてください。



git restore

作業中に内容が間違っていた場合、Ctrl+Zで元に戻すなどを使用しますが、その内容が大きすぎる場合は、restoreを使用して一度に修正前の状態に戻すことができます。


[git restore コマンド]
1
2
3
4
5
6
# 最近 Commit された状態に現在のファイルの修正内容を戻す
git restore ファイル名
# 入力したファイルを特定の Commit ID 時点に復元
git restore --source CommitID ファイル名
# 復元とは関係ないが、これで特定のファイルのStagingをキャンセルできる
git restore --staged ファイル名

実習_1. FileCが正常に動作しない!作業内容を破棄して最近のCommit状態に戻そう

img

壊れたFileCが最も最近のCommitに戻りました。



git revert

image-20240715153715849

一生懸命作業中に、過去のCommitであるFileBに問題が発生しました。
このような場合、FileBのCommitを削除するコマンドは残念ながら存在しません。
代わりに、FileBのCommitをキャンセルするCommitを生成する方式を取ります。


[git revert コマンド]
1
git revert CommitID

実習_2. 上記3つのCommitのうち、FileBに問題が多いためfc7bf84 Commitをキャンセルしたい。

img

コマンドを入力すると、下記のような画面が表示されます。
(環境によって異なる場合もある)
ここでCommitに対するメッセージを変更することもできますが、私はそのまま使用しました。

img

その後、この画面を閉じると、該当CommitをキャンセルするCommitが生成され、キャンセルしたCommitの内容であるFileB.txtファイルが消えたことを確認できます。

img

結論として、revertコマンドで特定のCommitで行われた作業を消すことができます。

revertする際、同時に複数のCommit IDを入力可能
・最近行ったCommitを1つだけrevertしたい場合は、git revert HEADと入力すると便利
・mergeコマンドによって新しく作成されたCommitもrevert可能(mergeがキャンセルされる)



git reset

すべてを元に戻したい!resetは過去に移動可能なタイムマシンです。
resetを使用すると、特定のCommitの時点にすべてを戻すことが可能です。
もちろん、作業フォルダのファイルも元に戻すことが可能です。


[git reset コマンド]
1
git reset --hard CommitID

image-20240715163123617

hardオプションを使用して、すべてを削除(記憶喪失)することも可能です。

・複数人で協業中のリポジトリではreset使用時に注意!
・untracked ファイル(git addしていないファイル)は消えずに維持される。
・git cleanコマンドを使用すると、untrackedファイルもすべて削除することもできる。


参考:reset時にオプション設定

image-20240715153715849

再び最初に戻って、FileA、B、Cを作成し、それぞれCommitした状態です。
git resetの後にhard / soft / mixedオプションを付けることができます。


[git reset オプション]
1
2
3
4
5
6
7
8
# a, bファイルは残っていて、cファイルが削除される
git reset --hard fc7bf84

# a, cファイルは残っていて、bファイルはStaging Areaに残っている
git reset --soft fc7bf84

# a, cファイルは残っていて、bファイルはStagingされていない状態になる
git reset --mixed fc7bf84

結論として、resetで、ファイルを完全に削除するのではなく、検討して再度Commitしたい場合は--soft / --mixedを使用します。
(実は、git resetだけで実行すると、--mixedオプションが自動的に適用されます。)



これで、restore, revert, resetの実習が終わりました。
次回は、GitHubの使い方第1回 git pushについて見ていきましょう!

このポストは著作権者の CC BY-NC 4.0 ライセンスに従います。

© HAKU. Some rights reserved.