GitHub Desktopで変更を元に戻す方法|コミット前・Push前・Push後のやり直しガイド
GitHub Desktopでの「やり直し」は、まだコミットしていないのか、コミットしたがPushしていないのか、すでにPushしたのかで方法が変わります。
先に現在の段階を確認してから操作を選びましょう。特に、共有ブランチの履歴を書き換えるForce pushは、ほかの人の作業へ影響するため注意が必要です。
GitやGitHubの用語を先に確認したい方は、「Gitとは?コミット・Push・リポジトリを初心者向けにやさしく解説」をご覧ください。GitHub Desktopの基本操作から順番に試したい方は、「GitHub Desktop と Visual Studio で始める段階的更新ガイド」から進めると分かりやすくなります。

1. 状況別のやり直し一覧
| 現在の状況 | 選ぶ操作 | 操作後 |
|---|---|---|
| コミット前の変更を取り消したい | Discard | ファイルが最後のコミット時点へ戻る |
| 直前のコミットを取り消したい(Push前) | Undo | 変更がChangesタブへ戻る |
| 複数のコミットを戻したい(Push前) | Reset to commit | 選んだコミットより後の変更がChangesタブへ戻る |
| 直前のコミットを修正したい(Push前) | Amend | 直前のコミットを新しい内容で置き換える |
| Push済みのコミットを打ち消したい | Revert | 変更を打ち消す新しいコミットが作られる |
| Push済みの履歴自体を巻き戻したい | Reset+Force push | リモート履歴を書き換えるため高リスク |
初心者の基本方針:Push前はUndo・Reset・Amend、Push後はRevertを選びます。
2. コミット前:変更を破棄する(Discard)
対象:Changesタブに表示されている、まだコミットしていない変更
Discardを実行すると、選んだファイルの変更が取り除かれ、最後のコミット時点へ戻ります。実行前に、破棄するファイルが正しいか必ず確認してください。
すべての変更を破棄する
- Changesタブを開く
- 変更ファイル一覧の見出し部分を右クリックする
- 「Discard All Changes」を選ぶ
- 確認画面で対象を確認し、「Discard Changes」を選ぶ
一部のファイルだけ破棄する
- Changesタブで破棄したいファイルを選ぶ
- ファイルを右クリックする
- 「Discard Changes」を選ぶ
- 確認画面でファイル名を確認して実行する
Discardした変更を復元する
GitHub Desktopで破棄した変更は、日付付きのファイルとしてOSのゴミ箱へ保存されます。ゴミ箱を空にする前であれば、対象ファイルを元の場所へ戻して復元できます。
注意:ゴミ箱を空にすると復元できません。残すか迷う変更は、DiscardではなくStashや一時ブランチへ退避しましょう。
3. コミット後・Push前:Undo・Reset・Amend
3-1. 直前のコミットを取り消す(Undo)
- Changesタブを開く
- 画面左下に表示される直前のコミットを確認する
- 「Undo」を選ぶ
- コミットの変更がChangesタブへ戻ったことを確認する
Undoはコミットだけを取り消し、変更した内容は残します。修正してから、改めてコミットできます。すでにPushしたコミットには使用できません。
3-2. 指定したコミットまで戻す(Reset to commit)
- Historyタブを開く
- 戻したいコミットを右クリックする
- 「Reset to commit」を選ぶ
- 選んだコミットより後の変更がChangesタブへ戻ったことを確認する
GitHub DesktopのReset to commitは、Push済みの最新コミットより前へは戻せません。Push済みの変更を安全に打ち消す場合はRevertを使います。
3-3. 直前のコミットを修正する(Amend)
- Historyタブで最新コミットを右クリックする
- 「Amend commit」を選ぶ
- コミットメッセージを直し、必要なら追加の変更を選ぶ
- 「Amend last commit」を選ぶ
Amendは直前のコミットを新しいコミットで置き換えます。Push済みのコミットをAmendするとForce pushが必要になるため、初心者はPush前だけに使うのが安全です。
4. マージをやり直す
4-1. マージコミットをPushする前
マージコミットが直前のコミットで、まだPushしていない場合は、Changesタブ左下の「Undo」で戻せます。変更内容は残るため、ブランチや競合の状態を確認してからやり直せます。
4-2. マージコミットをPushした後
GitHub上でマージしたプルリクエストを元に戻す場合は、対象のプルリクエストを開き、「Revert」が表示されていれば選びます。変更を打ち消すための新しいプルリクエストが作られるので、内容を確認してマージします。
「Revert」が表示されない場合や、コマンドで操作する場合は次の方法があります。
git revert -m 1 <マージコミットのハッシュ>
-m 1は、通常はmain側を基準としてマージコミットの変更を打ち消す指定です。実行後は内容を確認してからPushしてください。
5. Push後:基本はRevert
5-1. Revertで変更を打ち消す
Revertは、指定したコミットの変更を打ち消す新しいコミットを作ります。元のコミットも履歴に残るため、共有ブランチでPush済みの変更を戻す基本的な方法です。
- Historyタブを開く
- 打ち消したいコミットを右クリックする
- 「Revert Changes in Commit」を選ぶ
- 作成された打ち消しコミットを確認する
- 「Push origin」でGitHubへ送る
git revert <コミットのハッシュ>

5-2. Reset+Force pushは上級者向け
Push済みの履歴自体を書き換える方法です。共有ブランチでは、ほかの人が取得した履歴と食い違うため使用しないでください。
どうしても個人ブランチで行う場合も、先にバックアップ用ブランチを作り、通常の--forceより安全確認が働く--force-with-leaseを使います。
git branch backup-before-rewrite
git reset --hard <戻したいコミットのハッシュ>
git push --force-with-lease
6. 変更を守るための便利な操作
Stash(一時退避)
まだコミットしたくない変更を一時的に避難できます。Changesタブの変更ファイル見出しを右クリックし、「Stash All Changes」を選びます。GitHub Desktopで保持できるStashは1組だけです。
Cherry-pick(特定コミットを別ブランチへコピー)
間違ったブランチへコミットした場合などに、必要なコミットだけを別のブランチへコピーできます。Historyで対象コミットを右クリックし、「Cherry pick commit」を選び、コピー先のブランチを指定します。
Reflog(ローカルで見失ったコミットを探す)
Resetなどで履歴上から見えなくなったコミットを、ローカルの操作記録から探す上級者向けの方法です。
git reflog
git switch -c rescue <コミットのハッシュ>
7. CLI早見表
# 直前のコミットを取り消し、変更を残す
git reset --soft HEAD~1
# 指定したコミットまで戻し、変更を作業フォルダーに残す
git reset --mixed <コミットのハッシュ>
# Push済みのコミットを安全に打ち消す
git revert <コミットのハッシュ>
# 直前のコミットを修正する
git commit --amend
# 変更を一時退避して戻す
git stash push -u
git stash list
git stash pop
8. 操作前のチェックリスト
- 対象のリポジトリとブランチは正しいか
- 変更はコミット済みか
- そのコミットはPush済みか
- 共有ブランチではないか
- Discardするファイルを確認したか
- 高リスクな操作の前にバックアップ用ブランチを作ったか
まとめ
- コミット前の不要な変更はDiscard
- Push前の直前コミットはUndo
- Push前の複数コミットはReset to commit
- Push前の直前コミット修正はAmend
- Push済みの変更はRevert
- Reset+Force pushは共有ブランチで使わない
迷ったときは、まず作業を止めて「コミット済みか」「Push済みか」を確認してください。状況が分かれば、必要な操作を安全に選べます。








ディスカッション
コメント一覧
まだ、コメントがありません