すたらブログ

文系Webプログラマの備忘録

Git Gui: 過去のコミットの利用例

目次

関連記事: Windows: Git GUIを使う準備


過去のコミットの特定のファイルが欲しい

例えば、過去に不要と思って削除したファイルを復元したい場合。
チェックアウトという機能を使います。

Git GUIの場合

  1. 一旦、過去のコミットの状態を丸ごと復元する。
  2. 復元したいファイルを別の場所に避難させる。
  3. 最新のコミットの状態に戻す。
  4. 避難させたファイルを戻す。

実際にやってみます。
過去に削除したtest2.phpを復元したい場合。

gitk側で、削除する前の版のSHA1 IDをコピーします。

Git GUIのメニューでブランチ > チェックアウトを選び、ラジオボタンの選択をリビジョン式を移し、その枠の中に先ほどのIDを貼り付けます。
その後、チェックアウトを押します。

エクスプローラでフォルダの中身を確認すると、全てが過去の版に戻っています。
目当てのtest2.phpを別の場所へ避難させます。

もう一度Git GUIのメニューでブランチ > チェックアウトを選び、今度はローカルブランチmasterを選択してチェックアウトします。
これで、再び最新の版に戻ります。

後は、避難させたtest2.phpを戻すだけです。

Git Bashの場合

コマンドラインならば下記で済みます。
なお、復元したファイルは既にコミット予定(ステージングエリア)に入っています。

  1. git log --onelineで短縮されたIDを確認する。
    (履歴が長い場合、jkで上下にスクロール、qキーで離脱できます)
  2. git checkout [短縮ID] test2.phpで狙ったファイルだけを復元する。

過去のコミットの状態に戻す (後戻りできない)

注意: 前章の一時的な復元とは異なり、以下の方法で戻った場合はそれ以後の変更履歴が消えてしまうので、戻る前の状態に戻すことができません。

リセットという機能を使います。

Git GUIの場合

戻りたいコミットの上で右クリックして、masterブランチをここにリセットするを選びます。

ResetタイプはHardを選びます。

これで完了です。
gitkの履歴では最新のコミットも残っているように見えます。
実際、最新のコミットにリセットすることで元に戻すことができます。
しかし、一度gitkを閉じるとリセットしたコミット以後の履歴は消えてしまいます。
ソフトウェアやコンピュータがフリーズする可能性もあるので、やはり後戻りできないことを覚悟して実行してください。

Git Bashの場合

  1. git log --onelineで短縮されたIDを確認する。
  2. git reset [短縮ID] --hardでリセットする。

直近のコミットの状態に戻す (後戻りできない)

ファイルをいろいろ編集したけれど、全部破棄して直近のコミットのまっさらな状態に戻したい場合。
前章の方法でリセットしてもいいのですが、もっと簡単な方法があります。

Git GUIの場合

メニューでブランチ > リセットを選ぶだけです。

Git Bashの場合

git reset --hardを実行するだけです。


実は、後戻りできる

コマンドラインだけですが、できます。
reflogには最終的なコミット履歴だけでなく、チェックアウトやリセット、それによって消えてしまったコミットも記録されています。
ただし、それらは30日で消えてしまいます。
保険として捉えてください。

  1. git reflogで短縮されたIDを確認する。
  2. git reset [短縮ID] --hardでリセットする。