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
- Current Branch を main に切り替える
- 右上で Fetch origin
- Pull origin をクリック
- 作業ブランチに戻り、Branch → Update from main を実行
👉 「mainに切り替えずにPull」すると、現在のブランチだけ更新されるため注意。
7. 運用のまとめ
状況 | CLI操作 | GitHub Desktop操作 |
---|---|---|
コミットメッセージ修正 | git commit –amend | History → Amend commit |
コミット取り消し(変更残す) | git reset –soft HEAD^ | History → Revert this commit |
コミット完全削除 | git reset –hard HEAD^ | History → Discard all changes |
複数まとめる | git rebase -i | PRマージ時に「Squash and merge」 |
マージ取り消し | git revert -m 1 | PR画面 → Revertボタン |
誤Push取り消し | git revert | History → Revert this commit |
main更新 | git checkout main && git pull | mainに切替 → Fetch → Pull |
まとめ
- Gitの「やり直し」には多数の方法があるが、**安全(revert, amend, reset –soft)と危険(reset –hard, force push)**を区別することが重要。
- GitHub Desktopでは「mainに切り替えてPull」が基本中の基本。
- チーム開発では 履歴を書き換えないRevert運用 が推奨される。
訪問数 8 回, 今日の訪問数 8回
ディスカッション
コメント一覧
まだ、コメントがありません