【Git】Source Treeのコミット関連操作をコマンドで実行する

GItのバージョン管理ツールに、Source Tree があります。

www.sourcetreeapp.com

ファイルの変更が多い場合、差分が見やすいので重宝しています。
とても便利なツールなのですが、Gitに慣れていくとコミットする手順に煩わしさを感じます。
細かい操作にも向きません。

さて、
今回は、ツールの操作をコマンドで実行する方法について触れます。

目次

この記事の見方について

この記事では、Source Tree内で出てきた言葉を用います。
難しい用語は使用しないようにしますが、ツールを利用した上で見ていただけると幸いです。

また、今回はツールの「ファイルステージング」画面のみ取り上げます。

名称について

記事内でステージングエリアや、ワーキングディレクトリと言う名称を使いますが、下記の事を指します。

f:id:nakahashi_h:20210705153443p:plain

もしかしたら正式名称があるかもしれませんが、ツールのドキュメントを見つけられませんでした。
そのため、Git のドキュメントに準じた言い方に変えていますのでご了承ください。

git-scm.com

また、ステージングエリアとはGitで言うインデックスと同じ意味です。

ステージングエリアに登録

全てステージングエリアに登録

ワーキングディレクトリ画面の左上にある、「ステージングに未登録のファイル」チェックボックスを有効にした時の挙動です。

f:id:nakahashi_h:20210705152833p:plain

有効にすると、全ての変更がステージングエリアに登録されます。

f:id:nakahashi_h:20210705152844p:plain

コマンド

$ git add .

個別でステージングエリアに登録

ワーキングにあるファイルを個別に登録する場合です。

ツールでは、差分ファイルに対して次の操作をします。

  • 差分の右メニューを選択 -> 「ファイルをステージングに移動」を選択
  • ファイル名の左にあるチェックボックスを選択

f:id:nakahashi_h:20210705154117p:plain

コマンド

$ git add (ファイル名)

ファイルをワーキングディレクトリに移動(ステージングエリア登録解除)

全てワーキングディレクトリに移動

ステージングエリア画面の左上にある「ステージング済みのファイル」チェックボックスを選択すると、全てのステージングエリアファイルをワーキングディレクトリに移動できます。

f:id:nakahashi_h:20210705155151p:plain

コマンド

$ git reset .

個別にワーキングディレクトリに移動

ステージングエリアにあるファイルを個別に登録する場合です。

ツールでは、差分ファイルに対して次の操作をします。

  • ステージングエリアに登録したファイルの右にあるメニューを選択 -> 「ファイルをステージングから除く」を選択
  • ファイル名の左にあるチェックボックスを選択

f:id:nakahashi_h:20210705155454p:plain

コマンド

$ git reset (ファイル名)

変更を破棄

ワーキングディレクトリの変更分を破棄して、変更前の状態に戻します。
破棄については、まとめて実行する機能はありません。

もちろんコマンドでは全削除実行事は可能です。

ファイルを破棄

既存のファイルから、差分を破棄します。
ファイル名の右メニューから、「ファイルを破棄」を選択します。

f:id:nakahashi_h:20210705160113p:plain

コマンド

$ git checkout (ファイル名)

ファイルを削除

新しく追加したファイルの場合は、そもそも差分がないため、git checkoutコマンドは実行できません。
そのため、ファイルを削除する必要があります。

削除するには、ファイル名の右メニューから、「ファイルを削除」を選択します。

f:id:nakahashi_h:20210705160619p:plain

コマンド

Git のrm コマンドを使用します。 ツールの操作は、実行する際に、上書きオプション(-f)を指定した状態です。

$ git rm -f (ファイル名)

Tips

rmコマンドのあれこれ

Git rm コマンド vs Linux rm コマンド

Linuxのrm コマンドと、Gitのrm コマンドの違いは何でしょうか?

そもそもGitはLinux環境下のファイルを管理するために作られた仕組みです。
そのため、コマンドも合わせたものではないかと思われます。

機能的には同じものなのですが、GitのrmコマンドはGitのフローに則った削除を行う事を目的としています。

そのため、ステージングエリアに登録されたファイルは削除できません

f:id:nakahashi_h:20210705162627p:plain

強制的にステージングエリアのファイルを削除すると、ワーキングディレクトリに削除の履歴が残ってしまうので次のような状態になります。
削除はワーキングディレクトリの操作なので、ステージングエリアの変更には影響しないという事です。

f:id:nakahashi_h:20210705163307p:plain

参考

www.atmarkit.co.jp

git rm の キャッシュオプションについて

ステージングエリアからワーキングディレクトリに戻す際に使用するrm コマンドですが、前項のコマンドを実行する際にフォースオプションを指定しました。

オプションを指定しない場合は次のようなエラーメッセージが表示されます。

$ git rm index.html
error: the following file has local modifications:
    index.html
(use --cached to keep the file, or -f to force removal)

説明にもあるように、cached オプションを指定する事で、ワーキングディレクトリ上にキャッシュを残す事ができます。

cached オプションを使用した場合

実際に実行すると、次のような状態になります。

f:id:nakahashi_h:20210705164459p:plain

ステージングエリア上では、削除したことになっていますが、ワーキングディレクトリ上はファイルが作られた(?アイコン)ことになっています。


以上です。

私自身、Gitを覚える時にSource Treeから入りました。
そのため、コマンドとツールの関連付けに苦労しました。

また、ステージングエリアとワーキングディレクトリの話は非常にややこしいです。

この記事を参考に、コマンドライクなバージョン管理の助けになれば幸いです。

©︎2017-2018 WebSandBag