【ITニュース解説】How to revert a committed & pushed file
2025年09月09日に「Dev.to」が公開したITニュース「How to revert a committed & pushed file」について初心者にもわかりやすく解説しています。
ITニュース概要
Gitで、既にプッシュしたファイルの一部だけを過去の状態に戻す方法。`git log`で戻したいコミットを特定し、`git checkout`コマンドでファイルを復元。その後、変更を再度コミットしてプッシュすれば、特定のファイルだけを元に戻せる。
ITニュース解説
システム開発の現場では、ソースコードなどの成果物を管理するためにバージョン管理システムが不可欠である。その中でもGitは現在、世界中の開発現場で最も広く利用されているツールだ。Gitを使うことで、誰が、いつ、どのような変更を行ったのかを正確に記録し、必要に応じて過去の状態に戻したり、複数の開発者が並行して作業を進めたりすることが可能になる。開発を進める中で、間違いはつきものである。特に、一度「コミット」と呼ばれる形で変更を確定し、さらに「プッシュ」によってチームで共有しているリモートリポジトリにその変更を送信してしまった後に、特定の一つのファイルだけを元の状態に戻したい、という状況は頻繁に発生する。例えば、複数のファイルを修正して一つのコミットとして記録したが、後からその中の一つのファイルにバグを埋め込んでしまっていたことに気づくケースが考えられる。この場合、コミット全体を取り消してしまうと、正しく修正した他のファイルまで元に戻ってしまうため、問題のあったファイルだけを狙って修正する必要がある。
このような特定のファイルだけを過去の正しい状態に復元するための具体的な手順が存在する。まず最初に行うべきことは、元に戻したいファイルが目的の状態だった過去のコミットを特定することである。Gitは全ての変更履歴をコミットという単位で保存しており、各コミットには「コミットハッシュ」と呼ばれる一意の識別子が割り当てられている。git log -- <ファイル名> というコマンドを実行することで、指定したファイルに関連するコミットの履歴だけを時系列で確認することができる。この履歴の中から、ファイルが正しい内容だった時点のコミットを見つけ出し、そのコミットハッシュを記録しておく。このコミットハッシュが、いわばタイムマシンの行き先を指定するための重要な情報となる。
次に、特定したコミットハッシュを使って、対象のファイルを過去の状態に書き戻す作業を行う。ここで使用するのが git checkout <コミットハッシュ> -- <ファイル名> というコマンドである。このコマンドは、指定したコミットハッシュの時点における、指定したファイルの内容を、現在の作業ディレクトリに復元する効果を持つ。この操作の重要な点は、指定したファイルのみが影響を受け、同じコミットに含まれていた他のファイルや、現在のブランチにある他の変更には一切影響を与えないことだ。これにより、安全かつ正確に問題のファイルだけを過去の状態に戻すことができる。コマンド実行後、ローカルのファイルは指定した過去のバージョンで上書きされる。
ファイルを過去の状態に戻しただけでは、作業は完了しない。この「ファイルを過去の状態に戻した」という行為自体を、新しい変更としてGitの履歴に記録する必要がある。Gitから見ると、単にファイルの内容が変更されただけと認識されているため、この変更を正式な履歴として確定させなければならない。これは、通常のファイル修正時と同じ手順で行う。まず git add <ファイル名> コマンドで、変更されたファイルをステージングエリアと呼ばれる、コミット対象の変更を一時的に置いておく場所に加える。次に git commit -m "メッセージ" コマンドを実行し、変更をコミットする。この際のコミットメッセージには、「どのファイルを、なぜ元の状態に戻したのか」を明確に記述することが推奨される。例えば、「FooFile.phpをバグ混入前の状態に復元」のように記述することで、後から履歴を見た他の開発者が変更の意図を容易に理解できるようになる。
最後に、ローカルリポジトリで作成したこの新しいコミットを、チームメンバーが共有しているリモートリポジトリに反映させる。これにより、他の開発者も修正内容を取り込むことができるようになる。この操作は git push コマンドで行う。このコマンドを実行すると、ローカルの変更履歴がリモートリポジトリに送信され、同期が完了する。この一連の操作は、過去のコミット履歴を書き換えるような危険な方法ではなく、「間違いを修正するためにファイルを過去の状態に戻した」という新たな履歴を追加するアプローチである。そのため、チーム開発において他のメンバーに混乱を与えることなく、安全に間違いを修正することが可能だ。このような基本的なGitの操作を正確に理解し、使いこなすことは、システムエンジニアとして効率的かつ安全に開発業務を遂行するための基礎となる重要なスキルである。