クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Git で間違いを取り消す方法

このレッスンのあとで: 作業を失わずに、間違いを取り消す方法を選ぶことができる。

60分のレッスンコマンド16件Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

Git で取り消すとは何か

Git で取り消すとは、間違った変更を、他の作業を失わずに元へ戻すことです。戻したい対象は、編集中のファイル、ステージ、コミットのどれかで、使うコマンドが変わります。

予定表に、間違った時刻を書いてしまったとします。まだ保存前か、もう共有したかで、安全な戻し方は違います。

このレッスンのゴール

メモ

作業を失わずに、間違いを取り消す方法を選ぶことができる。

大事な言葉

ことばいみれい
restore編集中のファイルや、ステージの内容を、記録した版に戻すgit restore notes.txt
revertあるコミットを打ち消す、新しいコミットを作るgit revert HEAD
resetブランチの先頭を、前のコミットへ動かす。履歴が書き換わるgit reset --soft HEAD~1
reflogHEAD が動いた記録。手元だけに残るgit reflog
HEAD~1今のコミットの、1つ前のコミット

学生が入力するセルは、このプレビューでは空白です。

状況ごとの、安全な取り消し方

状況コマンド履歴は
編集した、まだ add していないgit restore ファイル変わらない
add した、まだ commit していないgit restore --staged ファイル変わらない
commit した、まだ push していないgit reset --soft HEAD~1書き換わる
commit して、もう push したgit revert HEAD新しいコミットが増える

学生が入力するセルは、このプレビューでは空白です。

練習用の予定表を用意する

小さなリポジトリに、予定を1行書いて、最初のコミットをします。名前をまだ教えていないなら、レッスン1の2行を先に打ってください。

リポジトリを作る

コマンド
git init -q -b main notes

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

予定を書く

コマンド
printf "meeting 10:00\n" > notes/notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ステージに置く

コマンド
git -C notes add notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最初のコミット

コマンド
git -C notes commit -q -m "予定を始める"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

git restore は編集を捨てる

間違った時刻 99:99 を書いてしまいました。まだ add していないので、git restore で、最後のコミットの版に戻せます。

捨てた編集は、Git にも残りません。戻す前に、本当に要らないかを確かめましょう。

間違った編集をする

コマンド
printf "meeting 99:99\n" > notes/notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

編集を捨てる

コマンド
git -C notes restore notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ファイルを読む

コマンド
cat notes/notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

git revert は、打ち消すコミットを足す

今度は、パスワードの行をうっかり commit しました。もし push 済みなら、履歴を書き換えてはいけません。

git revert HEAD は、直前のコミットを打ち消す、新しいコミットを作ります。元のコミットは履歴に残ります。

パスワードの行を足す

コマンド
printf "password=abc\n" >> notes/notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

うっかりコミットする

コマンド
git -C notes commit -q -am "パスワードを足す"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

打ち消す

コマンド
git -C notes revert --no-edit HEAD

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

履歴を読む

コマンド
git -C notes --no-pager log --format="%s"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

reset は履歴を巻き戻し、reflog は救う

git reset --hard HEAD~1 は、先頭のコミットを履歴から外し、ファイルもそのコミットの前に戻します。手元だけのコミットなら、使えます。

消えたように見えても、git reflog に記録が残ります。HEAD@{1} は、HEAD が1回前にいた場所です。

予定を足す

コマンド
printf "meeting 11:00\n" >> notes/notes.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

予定をコミットする

コマンド
git -C notes commit -q -am "予定を足す"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1つ前に巻き戻す

コマンド
git -C notes reset --hard HEAD~1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

HEAD の動きを読む

コマンド
git -C notes --no-pager reflog --format="%gs"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

消えたコミットを戻す

コマンド
git -C notes reset --hard 'HEAD@{1}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

push 済みのコミットに reset を使う人がいます。他の人の履歴とずれて、push が拒否されます。push 済みなら revert、手元だけなら reset と覚えましょう。

このラボとソースについて: Git と Gitea のラボ:自分専用の Git サーバーでクローン、コミット、プッシュを学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。