Windows シェル拡張(エクスプローラに機能を追加)で Git を操作できる無料の Git クライアントソフトウェア TortoiseGit で、Git で管理しているファイルの内容を変更した際に、どの部分が変更されたかを変更前と変更後で、比較して確認する手順と、その変更内容を取り消す手順について紹介します。
変更内容の取り消しに対応していると考えられる git reset コマンドについても簡単に紹介します。

※ TortoiseGit-2.17.0.2-64bit を使用します。
前回の記事
前回は、Git で管理外のファイルを、TortoiseGit でステージングエリアに追加した後コミットして、そのブランチに記録して、管理されるようにしました。
Git で管理しているファイルの内容の変更
ブランチにコミット済みの、作業ディレクトリのファイルの内容を変更してみましょう。
Git クライアントは、追跡対象のファイルの変更をすぐに検知して、表示します。
下図は、ゲームエンジン Godot Engine のエディタです。
このエディタ上で Git 管理しているファイルを編集すると、導入した Git plugin v3 バージョン管理アセットの「コミット」タブの「未ステージの変更」リストの中に黄色い文字色で「ファイル名(変更済み)」という形で変更されたことが表示されました。
13-1024x610.png)
同様に、エクスプローラのシェル拡張である TortoiseGit という別の Git クライアントソフトでも検知され、変更済みであることが表示されました。
14.png)
差分の確認
変更が検知されたファイルの、現在のブランチのファイル内容と、作業ディレクトリのファイル内容の差分を、エクスプローラの TortoiseGit を用いて、確認してみましょう。
変更が検知された赤色の!マークのついたアイコンのファイルを選択して、右クリックで表示されるメニュー「TortoiseGit」→「差分」を選択します。

ブランチにコミットされているファイル内容と、作業ツリー(作業ディレクトリ)のファイル内容の差分が TortoiseGitMerge アプリで表示されました。
※比較するアプリは「設定」ウィンドウの「差分ビューア」ページで変更できます。

git reset について
TortoiseGit の「変更の取り消し」メニューに対応していると考えられる git reset コマンドについて先に紹介して、リセットの影響範囲について確認します。
git reset にはオプションをつけることで、3段階のリセットを行えます。
何も指定しない場合は、3段階までの全てのリセットが行われます。
※ TortoiseGit の既定の「変更の取り消し」はおそらく3段階までの全てのリセットだと思います。
今回のファイルの内容の変更を取り消す処理は、後述する3段階目で行われます。
reset
コマンドを使うと、3つのツリーを以下の順で上書きしていきます。どこまで上書きするかはオプション次第です。Git – リセットコマンド詳説
- HEAD が指し示すブランチを移動する (
--soft
オプションを使うと処理はここまで)- インデックスの内容を HEAD と同じにする (
--hard
オプションを使わなければ処理はここまで)- 作業ディレクトリの内容をインデックスと同じにする
1段階目は、現在のコミットの位置を、指定されたコミット位置(デフォルトでは HEAD の指すコミットの位置)に設定します。
これにより、Git 管理されているファイルが、指定されたコミットの内容に置き換わります。
2 段階目は、ステージングエリアに追加したファイルの除去を行います。 Git の状態を表す3つのツリーのひとつであるインデックスの内容を、指定したコミット位置のインデックスの内容と同じにします。
これにより、ワーキングツリーで変更して、次回のコミット対象としてステージングエリアに追加したファイルが、指定されたコミットのインデックスの内容に戻されます。
3段階目は、ワーキングツリー(作業ディレクトリ)のファイルなどの内容を、指定されたコミットに記録されている内容と同じにします。
これにより、ワーキングツリーで行ったファイルへの編集が、指定されたコミットの内容に巻き戻されます。
変更の取り消し
変更した作業ディレクトリのファイルの内容を、ブランチに記録されている内容に戻して、変更を取り消します。
差分のある作業ディレクトリのファイルを右クリックして表示されるメニュー「TortoiseGit」→「変更の取り消し」を選択します。

「変更の取り消し」を行う対象のファイルの取捨選択を行うダイアログが表示されるので、変更を取り消すファイルだけをチェックして OK ボタンを押します。
※前章で述べたように、変更の取り消しには、ファイル内容の変更、ステージングエリアへの追加などのリセットが含まれます。

「変更の取り消し」が成功すると、ブランチにコミットされているファイルの内容に戻され、差分がなくなり、ファイルのアイコンが赤から緑色に変わりました。
OK ボタンで閉じましょう。

ファイル内容の変更の取り消しの確認
先ほどファイル内容を変更した、ゲームエンジン Godot Engine のエディタをアクティブにすると、ファイルが TortoiseGit によりリセットされたことにより、ファイルをより新しいものに変えるかを尋ねられます。

「ローカルの変更を破棄してリロード」ボタンを押すと、変更が取り消された状態のファイルの内容が表示されました。

「変更の取り消し」を行った後に、新たにテキストエディタなどで開いた場合は、このような確認は行われず、すぐに変更が取り消された状態のファイルが表示されます。
まとめ
今回は、Windows シェル拡張(エクスプローラに機能を追加)で Git を操作できる無料の Git クライアントソフトウェア TortoiseGit で、Git で管理しているファイルの内容を変更した際に、どの部分が変更されたかを変更前と変更後で、比較して確認する手順と、その変更内容を取り消す手順について紹介しました。
変更内容の取り消しに対応していると考えられる git reset コマンドについても簡単に紹介しました。
参照サイト Thank You!
- Git
- TortoiseGit – Windows Shell Interface to Git
- gitで別ブランチの特定ファイルのみをとりこむ
- Godot Engine – Free and open source 2D and 3D game engine
- バージョン管理システム — Godot Engine (4.x)の日本語のドキュメント
- Home · godotengine/godot-git-plugin Wiki
- Git plugin v3 · godotengine/godot-git-plugin Wiki
- Git – リセットコマンド詳説
- Gitコマンドチートシート TortoiseGit対応版 #Git – Qiita
記事一覧 → Compota-Soft-Press
コメント