ローカル&お一人様ではじめるSourceTreeによるGit入門。
連載3回めの前回では「指定したリポジトリ(ローカルファイル)の状態をSourceTreeに保存(コミット)する」までをご説明しました。
4回目の今回は、リポジトリ内のファイルを編集し、その状態がどのようにGitに記録されるか確認してみたいと思います。
また、コミットのログを利用して、コミットを前の段階までリセットしたり、SourceTreeからリポジトリ内のファイルまで操作してみます。
※作業内容が消えてしまうので、実際の業務ファイルでお試しはやめてください。
前回の状態の確認
前回はリポジトリに指定したフォルダの初期状態をコミットしてGitに覚えてもらいました。
まだフォルダ内の「memo.txt」は白紙の状態です。
Gitの画面は、現状このようになっています。
それではひきつづき作業をしていきます。
リポジトリ内のファイルを編集してみよう
リポジトリに指定したフォルダの中に入っている唯一のファイル「memo.txt」を編集してみましょう。
通常通り「Gitテスト」フォルダを開き、「memo.txt」ファイルをダブルクリックしてメモ帳などで開きます。なにかしらテキストを打ち込んで保存してください。
SourceTreeに戻り、「ファイルステータス」タブを確認すると、一瞬のタイムラグはありますが、「memo.txt」の変更がSourceTreeに読み込まれます。
左側のエリアには、打ち込んだテキストの内容が表示されていますね。
この段階で再びコミットしてみましょう。
変更作業をコミットしよう
前回と同じ手順ですが、おさらいを兼ねてやってみます。
「memo.txt」を選択し、「全てインデックスに追加」もしくは「選択をインデックスに追加」ボタンで、ステージングエリアに送ります。
その状態で、コミットのためのコメントを記入しましょう。記入内容は自由ですが、あとからどのような状態を記録しているのか、見て分かる内容にすることが大事でしたね。
コミットしたら、ログのタブを開いてみましょう。
コミットされ、作業履歴が保存されているのがわかります。
これで、変更作業をGitに保存することができました!
現在Gitには、「何も作業してない初期状態」のコミットと、「memo.txtに文章を追加した状態」のコミットが作成されています。
文章を追加してSourceTreeのコミットの範囲を確認
ここでもう少し詳しくSourceTreeの操作を見ていくために、さらにmemo.txtに手を加えてみます。もっと多くの文章を追加してみましょう。
ログ画面でファイルを選択し、ダブルクリックすると該当ファイルを開くことができます。
memo.txtに文章を追加してみました。追加した文章には「ダミーテキストジェネレーター」の坊っちゃんを使用させていただきました。
memo.txtを保存してから、SourceTreeのログ画面を見てみましょう。変更部分が反映されています。
もし変更内容が反映されていなかったら、SourceTree内のどこかをクリックすると新しい情報を読込んでくれます。
SourceTreeにおけるファイルの更新の認識について
SourceTreeでは、リポジトリ(監視下にあるフォルダ)の中のファイルが保存されるとファイルが変更された!と認識してくれます。
保存前の編集作業段階は察知してくれません。つまり保存するまではコミットができません。
ファイル保存 → SourceTreeに反映 → コミットできる!
とおぼえてください。
また初心者な私は、リポジトリ設定さえすれば保存したごとにファイル履歴を自動で取っておいてくれるのかなーと期待していましたが、そんなこともありませんでした。
履歴はコミット操作した分しか残りません。
では、追加分を「坊っちゃんを追加」というコメントと共にコミットしておきましょう。
コミットをリセットしてみる
コミットに慣れたところで、コミットの履歴や、リポジトリ内のファイルをリセット(前の状態に戻す)という作業を行ってみたいと思います。
現在ログ画面では、このようにコミットが連なっています。
リセットしたい状態で保存しておいたコミットを選択
今回は一つ前の「最初のテキスト入力」状態まで、リセットしてみましょう。
まず戻したい状態のコミットを選択します。
その状態で右クリックし、「現在のブランチをこのコミットまでリセット」を選択します。
ウィンドウが開き、Soft・Mixed・Hardの選択を迫られます。説明を見ても意味がさっぱりです。
Soft・Mixedはコミットだけを打ち消してくれる
Soft・Mixedを選択すると、コミットのログは「最初のテキスト入力」の状態まで戻ります。
画像をよく見ると、ログから「坊っちゃんを追加」のコミットが消えています。最新のコミット情報は、選択した「最初のテキスト入力」時点に戻っています。
が、ここで実際のファイルを見てみると、追加した坊っちゃんの文章自体はmemo.txtに残っています。
Soft・Mixedモードではコミットの記録だけが指定時点に戻り、リポジトリ内のファイル本体に影響はありません。
SoftモードとMixedモードの違い
コミットが指定時点に戻るだけのSoftモードとMixedモード。この2つの違いは、リセットしたコミット時点以降のファイル変更を、インデックスに追加した状態にするか否か、それだけです。
ややこしいですね、実際の画面を見て確認してみましょう。
Softモードの場合
「Soft - ローカルの変更を全てそのままにする」モードを選ぶと、ログ画面は次のようになります。
ファイルステータス画面に切り替えると、インデックスにmemo.txtが追加されている状態です。
Mixedモードの場合
「Mixed - 作業コピーの変更はそのままにするが、インデックスの状態はリセットする」モードを選ぶと、ログ画面はSoftモード時と同じになります。
ファイルステータス画面では、Softモードと違いインデックスにはmemo.txtが追加されていません。
このように、Soft・MixedモードではSourceTree(Git)のコミットの記録だけがリセットされます。
ファイルの状態までリセットしたいならHardモード
リポジトリの中まで綺麗さっぱり戻したいのよ!という衝動に駆られたときに使用するのが、Hardモードです。
Hardモードを選択すると、破壊的なメッセージが表示されます。
怯まずYesをクリックしてみました。
Soft・Mixedモードでは残っていた「コミットされていない変更があります」が、ありません。
リポジトリ内のmemo.txt本体を確認してみましょう。
追加した坊っちゃんのテキスト部分が消えています。
コミット履歴及びリポジトリ内のファイルの中身まで、完全に「最初のテキスト入力」でコミットした時の保存状態に戻りました。
まとめ
今回は、リポジトリ内のファイルを編集した時のSourceTree側の動きチェックと、コミットをリセットしたり、ファイル本体も前の状態に戻す作業をやってみました。
ファイルは綺麗に戻せましたが、戻す前の作業(坊っちゃん部分)は永久に失われてしまいました。
このような単純な操作ではなく、「ファイルを一旦もとに戻しつつ、坊っちゃん部分も別で保存」しておけたら大変便利ですよね。
その為に、Git(SourceTree)ではブランチという機能があります。
次回はGitの目玉機能である、ブランチに触れてみようと思いますので、宜しくお願いします。