😊

個人的「便利だな」と思ったGitコマンド4選

2023/02/07に公開

存在を知った時や使ってみた時に「これけっこう便利だな」と思ったGitコマンド4つをまとめました。

git fetch -p

-pを付けることで、削除されたリモートブランチのリモート追跡参照が削除されるようになります。
例えばリモートリポジトリでbranchAが削除されると、git fetch -pによりローカルリポジトリ上のorigin/branchAが削除されます。

git fetch --pruneも同様です
git pull -p/--pruneでプルする際に行われるフェッチにも適用できます

git log --oneline

コミットハッシュが短縮され、コミットログが1行で表示されるようになります。

git log --abbrev-commit --pretty=onelineも同様です

表示例: git logの場合

commit cmhash2commithash2commithash2commithash2 (HEAD -> master, origin/master, origin/HEAD)
Author: taro <taro@sample.jp>
Date:   Thu Sep 1 12:34:56 2022 +0900

    コミットB

commit cmhash1commithash1commithash1commithash1 (tag: v1.2.3)
Author: taro <taro@sample.jp>
Date:   Wed Aug 31 11:22:33 2022 +0900

    コミットA

表示例: git log --onelineの場合

cmhash2 (HEAD -> master, origin/master, origin/HEAD) コミットB
cmhash1 (tag: v1.2.3) コミットA

git status -s

git statusの結果が短い形式で表示されるようになります。

git status --shortも同様です

表示例: git statusの場合

On branch branchA
Your branch is ahead of 'origin/branchA' by N commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   modified_file_both.md
    modified:   modified_file_staged.md
    new file:   new_file_staged.md
    renamed:    rename_target.md -> renamed_staged.md

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    deleted:    deleted_file_unstaged.md
    modified:   modified_file_both.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    untracked_file.md

表示例: git status -sの場合

 D deleted_file_unstaged.md
MM modified_file_both.md
M  modified_file_staged.md
A  new_file_staged.md
R  rename_target.md -> renamed_staged.md
?? untracked_file.md

またgit status -sbとすると、git status -sの表示にブランチとその追跡情報が加わります。

## branchA...origin/branchA
 D deleted_file_unstaged.md
MM modified_file_both.md
M  modified_file_staged.md
A  new_file_staged.md
R  rename_target.md -> renamed_staged.md
?? untracked_file.md

ショートフォーマットの時に各ファイル名の左側に表示される記号の詳しい説明についてはこちらを参照してください。

git branch -v/-vv

ローカルブランチ名の一覧とともに

  • 先頭コミットのハッシュ値
  • 上流ブランチ名(-vvの場合のみ)とその関係性
  • 先頭コミットのメッセージ

が表示されるようになります。

git branch —vgit branch -—verboseと同様です

表示例: git branch -v

  branchA cmhasha ファイル追加
  branchB cmhashb ファイル編集
  branchC cmhashc [gone] ファイル削除
* master  cmhashm Merge pull request #XX from abc/develop

表示例: git branch -vv

  branchA cmhasha [origin/branchA] ファイル追加
  branchB cmhashb ファイル編集
  branchC cmhashc [origin/branchC: gone] ファイル削除
* master  cmhashm [origin/master] Merge pull request #XX from abc/develop

※ 上流ブランチが削除されている場合「gone」と表示されます(例: branchC)

特に自身の開発現場では、プルリクエストをマージする際に「作業ブランチをリモートリポジトリから削除する」かつ「Squash and mergeを用いることがある」ため、このコマンドは不要なローカルブランチの特定に役立っています。
(git fetch -p→)git branch -v/-vvの結果に含まれる「gone」という表記をもとに不要なローカルブランチを探しています。

git branch --mergedの結果にはスカッシュマージされたブランチが含まれません

参考

Discussion