Gitでのやり直し大全:コミット・マージ・Pushを取り消す方法まとめ(GitHub Desktop対応)

はじめに

Gitを使っていると、必ず「やり直したい!」という場面に遭遇します。

例えば「コミットメッセージを間違えた」「不要なファイルをマージした」「リモートにPushしてしまった」など。

この記事では、CLI(コマンドライン)とGitHub Desktop(GUI)両方での「やり直し」方法を網羅的に解説します。


1. コミットをやり直す

1-1. 直前のコミットメッセージを修正

  • CLI
git commit --amend
  • GitHub Desktop
    • 「History」タブで直前のコミットを右クリック
    • Amend commit(または「コミットを修正」)を選択
    • 新しいメッセージを入力

1-2. コミットを取り消してやり直す(変更は残す)

  • CLI
git reset --soft HEAD^
  • GitHub Desktop
    • Undo / Reset to commit:コミットを“取り消して”変更を作業ツリーへ戻す(未Pushまで)
    • Revert:打ち消しコミットを新規に作る(Push後でも安全)

Revert は「打ち消しコミットを新規作成」します。変更が「Changes」に戻るわけではありません。変更を作業ツリーへ戻すのは 「Reset to commit」 または 「Undo」 です


1-3. コミットと変更を完全に取り消す

  • CLI
git reset --hard HEAD^
  • GitHub Desktop
    • 対応機能なし(HistoryではRevertのみ可能、ResetはCLIで行う)

⚠️ こちらは慎重に扱う必要があります


2. 複数のコミットをまとめる

2-1. rebaseでまとめる

  • CLI
git rebase -i HEAD~3
  • GitHub Desktop
    • GitHub Desktop単体でも「Squash」が可能です(Historyで複数コミットを選んでドラッグ&ドロップ、あるいはメニューから実行)。必要に応じて Force push が求められます。

3. マージを取り消す

3-1. Revertで安全に取り消す

  • CLI
git revert -m 1 <merge-commit-hash>
  • GitHub Web UI
    • 誤ってマージしたPRを開く
    • 右側の 「Revert」ボタン を押す
    • 自動生成されたRevert PRをマージ

3-2. 履歴ごと戻す(危険)

  • CLI
git reset --hard <commit-hash>
git push --force
  • GitHub Desktop
    • 対応機能なし(CLIでの操作が必要)

4. Pushをやり直す

4-1. まだ共有前なら

  • CLI
git reset --hard <commit-hash>
git push --force
  • GitHub Desktop
    • GitHub Desktopでも未Pushのコミットは「Undo」や「Reset to commit」で戻せます。CLIが必須なのは “Push後の履歴書き換え” を伴うケースです

4-2. 安全に取り消す(Revert)

  • CLI
git revert <commit-hash>
git push origin main
  • GitHub Desktop
    • 「History」で該当コミットを右クリック
    • Revert this commit
    • その後Push

5. ファイル単位でのやり直し

5-1. ステージから外す

  • CLI
git reset <ファイル>
  • GitHub Desktop
    • 「Changes」タブでチェックを外す

5-2. 変更を破棄する

  • CLI
git checkout -- <ファイル>
  • GitHub Desktop
    • 「Changes」タブでファイルを右クリック → Discard changes

6. mainブランチを最新に保つ(重要!)

CLI

git checkout main
git pull origin main

GitHub Desktop

  1. Current Branch を main に切り替える
  2. 右上で Fetch origin
  3. Pull origin をクリック
  4. 作業ブランチに戻り、Branch → Update from main を実行

👉 「mainに切り替えずにPull」すると、現在のブランチだけ更新されるため注意。


7. 運用のまとめ

状況CLI操作GitHub Desktop操作
コミットメッセージ修正git commit –amendHistory → Amend commit
コミット取り消し(変更残す)git reset –soft HEAD^History → Revert this commit
コミット完全削除git reset –hard HEAD^History → Discard all changes
複数まとめるgit rebase -iPRマージ時に「Squash and merge」
マージ取り消しgit revert -m 1PR画面 → Revertボタン
誤Push取り消しgit revertHistory → Revert this commit
main更新git checkout main && git pullmainに切替 → Fetch → Pull

まとめ

  • Gitの「やり直し」には多数の方法があるが、**安全(revert, amend, reset –soft)危険(reset –hard, force push)**を区別することが重要。
  • GitHub Desktopでは「mainに切り替えてPull」が基本中の基本。
  • チーム開発では 履歴を書き換えないRevert運用 が推奨される。

訪問数 8 回, 今日の訪問数 8回