はじめに
Git では、やりたいことに対して様々な方法をとることができますが、checkout が switch と restore に分けられるように、意味的により分かりやすいコマンドがあるはずです。
この記事では、個人的によく使っていた操作を意味的に分かりやすいコマンドに整理してみます。
branch の切り替え
現在の branch から、異なる branch へと切り替える際のコマンドです。
| 操作 | Before | After |
|---|---|---|
| branch の切り替え | git checkout <branch> |
git switch <branch> |
| branch の新規作成・切り替え | git checkout -b <branch> |
git switch -c <branch> |
switch を使うことで、切り替えるという意図を明確にします。
変更の取り消し
作業中の変更の取り消し
作業中のファイルの変更を取り消す際のコマンドです。
| 操作 | Before | After |
|---|---|---|
| ファイルの変更取り消し | git checkout -- <file> |
git restore <file> |
| ディレクトリ内の変更取り消し | git checkout -- <directory> |
git restore <directory> |
| 全ファイルの変更取り消し | git checkout -- . |
git restore . |
restore を使うことで、復元するという意図を明確にします。
作業中の変更の取り消し の方のコマンドをより明示的にするなら、-W or --worktree を付けることもできます (これはデフォルトの動作です)
ステージした変更の取り消し
ステージした変更を取り消す際のコマンドです。
| 操作 | Before | After |
|---|---|---|
| ファイルの変更取り消し | git reset HEAD <file> |
git restore -S <file> |
| ディレクトリ内の変更取り消し | git reset HEAD <directory> |
git restore -S <directory> |
| 全ファイルの変更取り消し | git reset |
git restore -S . |
-S は --staged のエイリアスです。
reset も復元という感じなのですが、ステージングエリアから戻すという意図が -S によって明確になります。
未追跡な変更の取り消し
新規作成などの追跡されていないファイルの変更を取り消す際のコマンドです。
| 操作 | Before | After |
|---|---|---|
| ファイルの削除 | rm <file> |
git clean -f <file> |
| ディレクトリの削除 | rm -rf <directory> |
git clean -f <directory> |
| 全ての未追跡ファイルの削除 | - | git clean -df |
これは Git の機能を使うことで、OS レベルの操作ではなく、Git 管理というスコープにおいて掃除を行うことを明確にしています。
全ての変更の取り消し
追跡されているか否かに関わらず、全てのファイルの変更を取り消す際のコマンドです。
| 操作 | Before | After |
|---|---|---|
| 全ファイルの変更取り消し |
git stash -u git stash drop
|
git restore . git clean -df
|
stash では退避ということになってしまうので、単に取り消しを行う場合は、こちらの方が良さそうです。
おわりに
Git のコマンドは大量にあり、やりたいことを実現するコマンドを手に馴染ませるまで時間がかかりますが、意味を意識してコマンドを使っていくと、より早く馴染むのではないかなと思います。