Gitでは、ファイルをコミットしたあとに「間違えてコミットしてしまった」と気づくことがあります。
そんなときは、TortoiseGitを使ってコミットを取り消すことができます。

本記事では、TortoiseGitでコミットを取り消し、ファイルを修正してから、もう一度GitHubへプッシュするまでの手順を説明します。

コミットを取り消す前の確認

今回は「TortoiseGitからGitHubへファイルを登録する方法」で使用した「TestClone」を使って、コミットを取り消す手順を説明します。

ローカルにある「TestClone」には以下の3つのファイルがあります。


GitHubは、ローカルにある「TestClone」をプッシュして登録した状態です。


TortoiseGitでコミットを取り消す

  1. 「TestClone」フォルダ内の何もないところで右クリックして、[TortoiseGit] → [ログを表示] を選択します。



  2. 取り消したいコミットを選択します。ここでは「ファイル名を修正しました」を選択します。



  3. 右クリックして、「”master” をここへリセット」を選択します。


  4. 「リセット」画面の「リセットの種類」は「Mixed」を選択して、[OK] ボタンをクリックします。


    リセットの種類
    Soft:コミットだけやり直したい。
    Mixed:コミットを取り消して、変更内容を修正したい。
    Hard:コミットも変更内容も完全に取り消したい。

  5. リセット結果が表示されますので、[閉じる] ボタンをクリックします。


  6. sample.bat のアイコンが「変更あり(赤)」に変わりました。また、test.csv がGitの対象から外れました。

    「”master” をここへリセット」を選択すると、masterの位置を選択したコミットまで戻すことができます。
    今回は「Mixed」を選択しているため、コミットは取り消されますが、コミットしたファイルの変更内容は残ります。

  7. 「”master” をここへリセット」を実行した後のログメッセージです。


修正してもう一度コミットする

  1. sample.bat を右クリックして [TortoiseGit] → [名前を変更] を選択して名前を変更します。ここでは「test.bat」に名前を変更します。


  2. test.txt はファイルの中身を変更します。


  3. フォルダ内で右クリックして [Git コミット] を選択します。

  4. コミットのメッセージを入力して、[コミット] ボタンをクリックします。


  5. コミット結果が表示されますので、 [閉じる] ボタンをクリックします。

  6. コミットしたファイルのアイコンが「コミット済み(緑)」に変わりました。


  7. コミット後のログメッセージです。


GitHubへプッシュする

  1. 「TestClone」フォルダを右クリックして [TortoiseGit] → [プッシュ] を選択します。

  2. 宛先のリモートがGitHubに設定した「origin」になっていることを確認して、[OK] ボタンをクリックします。



  3. プッシュが異常終了しました。


    「Note about fast-forwards」というエラーになり、プッシュできませんでした。
    ローカルとGitHubの履歴が一致していないため、GitHub側の変更を取り込むためにプルを行いました。
    しかし、ローカルにはGit管理外の test.csv が存在していたため、プルするとGitHub側の test.csv で上書きされる可能性があり、プルも拒否されました。

  4. エラーが発生したので、ローカルの test.csv を削除します。

  5. 「TestClone」フォルダを右クリックして [TortoiseGit] → [プル] を選択します。

  6. 「プル」画面が表示されますので、[OK] ボタンをクリックします。


  7. プル結果が表示されますので、[閉じる] ボタンをクリックします。


  8. GitHubにある test.csv がローカルに反映されました。


  9. もう一度、「TestClone」フォルダを右クリックして [TortoiseGit] → [プッシュ] を選択して、プッシュを実行します。

  10. 今度はプッシュが正常に実行できました。


GitHubのリポジトリを確認する

  1. ブラウザで、GitHubのリポジトリを開きます。


  2. リポジトリの画面に、先ほどTortoiseGitからプッシュしたファイルが反映されました。


まとめ

今回は、TortoiseGitを使って、ローカルのファイルをGitHubへ登録する方法を紹介しました。
今回の操作では、sample.bat を test.bat にリネームし、test.txt を修正してコミットしたあと、GitHubへプッシュしました。
プッシュ時には「Note about fast-forwards」というエラーが発生しましたが、ローカルの test.csv を削除してからプルすることで、GitHubにある test.csv をローカルへ反映できました。
最後にもう一度プッシュすることで、ローカルで行った変更をGitHubへ反映できました。

以上、TortoiseGitでコミットを取り消し、ファイルを修正してから、もう一度GitHubへプッシュするまでの手順を解説しました。