Gitで変更を取り消す方法|場面別のコマンド例と一緒に解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年8月)

✔このように感じている方へ

「gitでおこなった変更をどう取り消したらいいのだろう?」

「gitの取り消し操作の具体的な手順が知りたい」

「gitでの変更を取り消す事例が見たい」

✔当記事を通して伝えたいこと

  • gitでの変更取り消しの基本
  • gitでの取り消し操作の手順とその発展形
  • gitでの変更取り消しの具体例

当記事ではgitにおける変更取り消しの基本から、さまざまな状況下での取り消し操作まで、理解しやすい例を用いてわかりやすく解説していきます。

ぜひ最後まで読み進めてください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Gitの変更とは何か

こちらでは、「Gitの変更とは何か」についてお伝えしていきます。

  • Gitとは
  • 変更取り消しの動機

Gitとは

Gitとは、プログラムのソースコードなど、変更履歴を記録・追跡するための分散型バージョン管理システムです。

ファイルやディレクトリの変更履歴を容易に確認できます。

各開発者が独自のブランチで作業を進め、完成した時点でマージ(統合)できる、開発には欠かせない仕組みのひとつです。

変更取り消しの動機

変更取り消しの動機として、バグの修正や、過去のコードへ戻すことが挙げられます。

なぜならプロジェクトの進行中に、誤ったコードを追加してしまうことや、不要なファイルを作成してしまうことがあるからです。

不適切な変更による乱れたコードを直さなければなりません。

Gitは、これらの誤った変更を簡単に取り消す機能を提供しているのです。

ステージング(add)前の変更の取消

こちらでは、「ステージング(add)前の変更の取消」について説明します。

  • add前の変更回復
  • 変更の取り消し動作の裏側

add前の変更回復

ステージング前の変更を取り消したい場合は、こちらのコマンドを使います。

git checkout -- [ファイル名]

最後にコミットした時点に、ファイルを戻す方法です。

[ファイル名]の部分に、取り消したい変更を含むファイル名を指定してください。

変更の取り消し動作の裏側

以下のコマンドによる動作の裏側を見ていきます。

git checkout -- [ファイル名]

Gitの内部的では、以下がおこなわれています。

  • HEAD(最新のコミット)からファイルをコピー
  • ワーキングディレクトリに置き換える

結果として、指定したファイルの変更を取り消せるのです。

addしたがcommitしていない変更の取り消し

こちらでは、ステージング(add)したが、commitしていない変更の取り消し方法をご覧いただきます。

  • 追加変更をワークツリーへ戻す
  • 変更前の状態への復帰手順

追加変更をワークツリーへ戻す

addしたがcommitしていない変更を取り消すには、以下のコマンドを使います。

git reset HEAD [ファイル名]

このコマンドは、指定したファイルの変更をステージングエリアからワーキングディレクトリに戻します。

詳しくはこちらの記事をご覧ください。

変更前の状態への復帰手順

add後、commit前の変更を完全に取り消すには、以下の2つをおこなう必要があります。

git reset HEAD [ファイル名]
git checkout -- [ファイル名]

変更が完全に破棄され、ファイルは最後にcommitされた時点の状態に戻ります。

Commitの取消と修正

こちらでは、Commit後に取り消す方法をご覧ください。

何を取り消したいかで実行すべきコマンドも変わってきます。

  • 直前commitのやり直し法
  • commit数による取り消し法
  • 複数commit修正のステップ

直前commitのやり直し法

Gitで直前のcommitをやり直す方法はこちら。

git commit --amend

まだpushしていないcommitメッセージの変更や、一部の変更を忘れてcommitした場合に使用します。

具体例として、直前のcommitメッセージを”新しいコミットメッセージ”に変更してみましょう。

git commit --amend -m "新しいコミットメッセージ"

commit数による取り消し法

複数のcommitを取り消すには、こちらのコマンドです。

git reset --hard HEAD~[n]

ここで[n]は取り消したいcommitの数を表します。

例えば最新の3つのcommitが取り消すには、こちらの方法です。

git reset --hard HEAD~3

複数commit修正のステップ

複数のcommitを修正するには、以下のコマンドを使ってください。

git rebase -i HEAD~[n]

[n]は修正したいcommitの数です。

選択した範囲のcommitを一度に修正でき、commitの順序の変更や、メッセージの修正、commitの分割や結合などが可能になります。

変更を取り消す際の注意点とその対策

Gitで変更を取り消す際の注意点を見ていきましょう。

何も考えずに取り消すと、意図したこととは違う結果になってしまいます。

  • Gitでの変更取り消しの注意点
  • Pushされた内容の改善方法

Git変更取り消しの注意点

Gitの変更を取り消す際の注意点として、公開された履歴(特にpushされたもの)は原則として変更しないことが挙げられます。

公開された履歴は、ほかの開発者が流用している可能性が高く、ほかのリポジトリとの整合性を保たなければいけないからです。

もし変更を取り消す場合は、チーム間での共有が必須であるといえるでしょう。

Pushされた内容の改善方法

Pushしたあとに修正する方法もご紹介します。

間違えてpushしたものを取り消したい場合もあるでしょう。

git push origin +[前のコミットID]:[ブランチ名]

指定したコミットIDの状態にブランチを強制的に戻せます。

例えばコミットIDが「525bc65」だとしたら、コマンドは以下のとおりです。

git push origin +525bc65:main

ただしこれは、ほかの開発者に混乱をもたらす可能性があるので注意して使いましょう。

Gitの変更におけるベストプラクティス

Gitで変更を加える際のベストプラクティスをご紹介します。

Git初心者の方はぜひ参考にしてみてください。

  • コミットメッセージの書き方
  • 変更範囲の管理

コミットメッセージの書き方

コミットメッセージは、変更内容を一目で理解するための重要な要素です。

具体的で明瞭なメッセージを書くことで、後から変更履歴を確認したときに何がなされたのかを迅速に把握できます。

コミットメッセージは、以下のように書くと良いとされています。

  • 一行目に要約
  • 二行目を空行
  • 三行目以降に詳細

変更範囲の管理

ひとつのコミットに含まれる変更範囲は、なるべく小さく保ちましょう。

なぜなら問題が発生したときに原因を特定しやすくなるからです。

それぞれのコミットが一つの論理的な変更を表すように、コミット履歴を積み上げてください。

よくある問題とその対処法

Gitで変更を取り消すときに起こる、問題とその対処法をご紹介します。

事前に理解しておくことで、回避できる問題もあるでしょう。

  • 変更の取り消しに失敗したときの対処法
  • 誤ってpushしたときの対処法

変更の取り消しに失敗したときの対処法

Gitの変更を取り消す際に問題が発生した場合、以下のコマンドで変更履歴を確認し、必要なコミットに戻れます。

git reflog

Gitでの全操作履歴を表示するため、何が起きたのかを把握するのに便利です。

誤ってpushしたときの対処法

誤ってpushした場合でも、元の状態に戻せます。

git push origin +[前のコミットID]:[ブランチ名]

push前の状態に戻せるコマンドです。

ただしほかの開発者に影響がないか、必ず確認のうえ、実行しましょう。

まとめ

当記事では、Gitの変更管理の重要性について学習してきました。

適切なバージョン管理は、開発の効率と品質を高めるための基盤です。

Gitのコマンドや変更の取り扱いは複雑ですが、コマンドの意味を理解し、適切なシナリオで使用することでスキルは向上します。

これらの知識と経験を積み重ねることで、より効率的で安全なバージョン管理ができるでしょう。

タイトルとURLをコピーしました