DESIGN / CODE / INFRA / AI

解説

Gitの一番上はどのフォルダー?rev-parseで現在地と作業ツリーのルートを確認しよう

Gitの下の階層から、作業ツリーのルートと現在地を確認する練習。show-toplevel・show-prefix・show-cdupを、コミット不要の一時リポジトリで試す。

Gitの一番上はどのフォルダー?rev-parseで現在地と作業ツリーのルートを確認しよう
保存リストを見る →
この記事の道しるべ 5項目

プロジェクトの下のフォルダーへ移動していたら、「Gitのルートで実行して」と言われた。今の場所はpwdで見られるけれど、Gitが管理する作業ツリーの一番上はどこかな。

このページでは、今いる場所とGitのルートを表示して区別できるようになる。GitとBashが使えるターミナルを準備しよう。GitHubへの接続やコミットは不要で、新しい一時フォルダーだけで練習するよ。

ルートと現在地は別の基準

作業ツリーは、Gitで管理するファイルを実際に編集する場所。ルートはその一番上のフォルダーだよ。その中にpages/examplesというフォルダーがあれば、現在地は下へ移っても、同じ作業ツリーのルートは変わらない。

git rev-parseには、Gitが認識している場所を表示する指定もある。名前にparseとあるけれど、ここではコミット番号の解析ではなく、位置を確認するために使ってみよう。

一時リポジトリの二段下で表示する

次を一つのまとまりとして実行する。mktempは重複しにくい新しい一時フォルダーを作るコマンド。作成や移動に失敗した場合は、その先へ進まない書き方にしているよ。

(
  practice_dir=$(mktemp -d "${TMPDIR:-/tmp}/git-root.XXXXXX") || exit 1
  cd "$practice_dir" || exit 1
  git -c init.defaultBranch=main init -q || exit 1
  mkdir -p pages/examples || exit 1
  cd pages/examples || exit 1

  pwd
  git rev-parse --show-toplevel
  git rev-parse --show-prefix
  git rev-parse --show-cdup
  git rev-parse --is-inside-work-tree
)

出力のうち、pwdの末尾は/pages/examples。--show-toplevelは、その二段上のgit-rootから始まる一時フォルダーの絶対パスになる。名前の末尾のランダムな文字列は実行するたびに違うので、同じ文字列を探す必要はないよ。

その後は、次の順で表示される。

pages/examples/
../../
true

--show-prefixはルートから現在地まで、--show-cdupは現在地からルートへ戻る方向の相対パス。二つは逆向きなので、どちらも「Gitの場所」と一括りにしないようにしよう。

表示しただけでは移動しない

--show-toplevelでルートの名前が出ても、シェルの現在地はpages/examplesのまま。移動したい場合は、上の括弧の中へ次を追加してみよう。

practice_root=$(git rev-parse --show-toplevel) || exit 1
cd "$practice_root" || exit 1
pwd
git rev-parse --show-prefix

practice_rootへ保存したパスを二重引用符で囲み、cdへ渡している。スペースがあるパスでも、一つの移動先として渡すためだよ。

今度のpwdはルートを表示し、--show-prefixは空の行になる。ルート自身から見た下の階層がないためで、必ず文字が出なければ失敗、ということではないんだ。

Gitが見つからない場合を分ける

普段の端末で「not a git repository」と出たら、今いる場所が目的のリポジトリの中かを確認しよう。Git管理外の場所では、--is-inside-work-treeでも単純にfalseだけが返るとは限らず、Gitがリポジトリを見つけられずエラーになる。

エラーを消すためだけに、今いる場所でgit initを実行する必要はないよ。誤った場所に新しい管理情報を作ることになる。まずpwdと、開きたいプロジェクトの場所を照合しよう。

また、ここで表示するのは作業ツリーのルートで、Gitの管理データを保存する場所そのものではない。通常の.gitだけでなく、リンクしたworktreeなど別の構成もある。作業ツリーを持たないbareリポジトリでは--show-toplevelはエラーになるため、今回の通常の練習と分けて考えてね。

練習が終わったら元の場所へ

括弧の中でだけ移動しているので、終了後は元の端末の作業場所へ戻る。一時フォルダーは確認用に残るよ。不要なら、自分で作った一時フォルダーの場所と中身を確認してから片付けよう。

編集部では2026年11月1日にGit公式資料を確認し、Git 2.52.0で二段下のprefix・cdup・ルート、ルートでの空のprefix、表示だけでは現在地が変わらないことを検証した。基本のpwdとcd、設定の出所を読むgit configのoriginとscopeも合わせて読めるよ。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。